From 37bbdadb6b21565360bc336a850d26a10f6d37dc Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Mon, 12 Feb 2007 00:54:46 -0800 Subject: [PATCH] --- yaml --- r: 48043 b: refs/heads/master c: 8d0be2b3bf4a55606967d7d84e56c52521e94333 h: refs/heads/master i: 48041: a16b39a2f37569ec9ba172acf9cfa4084befd4b4 48039: 2097658502bff9c38dc8d6ae67a005da62299253 v: v3 --- [refs] | 2 +- trunk/drivers/kvm/vmx.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 847a46c12030..908b0eab73b4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 133de9021d2988f3fbdad84c2d26484c7a757526 +refs/heads/master: 8d0be2b3bf4a55606967d7d84e56c52521e94333 diff --git a/trunk/drivers/kvm/vmx.c b/trunk/drivers/kvm/vmx.c index 407862825c1f..28da0cae64a7 100644 --- a/trunk/drivers/kvm/vmx.c +++ b/trunk/drivers/kvm/vmx.c @@ -125,6 +125,15 @@ static void __vcpu_clear(void *arg) per_cpu(current_vmcs, cpu) = NULL; } +static void vcpu_clear(struct kvm_vcpu *vcpu) +{ + if (vcpu->cpu != raw_smp_processor_id() && vcpu->cpu != -1) + smp_call_function_single(vcpu->cpu, __vcpu_clear, vcpu, 0, 1); + else + __vcpu_clear(vcpu); + vcpu->launched = 0; +} + static unsigned long vmcs_readl(unsigned long field) { unsigned long value; @@ -202,10 +211,8 @@ static struct kvm_vcpu *vmx_vcpu_load(struct kvm_vcpu *vcpu) cpu = get_cpu(); - if (vcpu->cpu != cpu) { - smp_call_function(__vcpu_clear, vcpu, 0, 1); - vcpu->launched = 0; - } + if (vcpu->cpu != cpu) + vcpu_clear(vcpu); if (per_cpu(current_vmcs, cpu) != vcpu->vmcs) { u8 error;