[xen stable-4.7] sync CPU state upon final domain destruction

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[xen stable-4.7] sync CPU state upon final domain destruction

commit 664433a1a04fa3618ca5bab530d68cf100107f41
Author:     Jan Beulich <[hidden email]>
AuthorDate: Wed Dec 20 16:19:12 2017 +0100
Commit:     Jan Beulich <[hidden email]>
CommitDate: Wed Dec 20 16:19:12 2017 +0100

    sync CPU state upon final domain destruction
    See the code comment being added for why we need this.
    This is being placed here to balance between the desire to prevent
    future similar issues (the risk of which would grow if it was put
    further down the call stack, e.g. in vmx_vcpu_destroy()) and the
    intention to limit the performance impact (otherwise it could also go
    into rcu_do_batch(), paralleling the use in do_tasklet_work()).
    Reported-by: Igor Druzhinin <[hidden email]>
    Signed-off-by: Jan Beulich <[hidden email]>
    Acked-by: Andrew Cooper <[hidden email]>
    master commit: 24246e1fb7496b830aca8a6a1fd3064ca1e3ebf9
    master date: 2017-11-23 11:38:22 +0100
 xen/common/domain.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/xen/common/domain.c b/xen/common/domain.c
index c5c78b9..047a489 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -798,6 +798,14 @@ static void complete_domain_destroy(struct rcu_head *head)
     struct vcpu *v;
     int i;
+    /*
+     * Flush all state for the vCPU previously having run on the current CPU.
+     * This is in particular relevant for x86 HVM ones on VMX, so that this
+     * flushing of state won't happen from the TLB flush IPI handler behind
+     * the back of a vmx_vmcs_enter() / vmx_vmcs_exit() section.
+     */
+    sync_local_execstate();
     for ( i = d->max_vcpus - 1; i >= 0; i-- )
         if ( (v = d->vcpu[i]) == NULL )
generated by git-patchbot for /home/xen/git/xen.git#stable-4.7

Xen-changelog mailing list
[hidden email]