[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] x86/vmx: don't call __vmxoff() blindly
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1316273911 -3600 # Node ID 7d13e08b51209721fde4979ae59cceda6854877a # Parent c5554f952a82c5d6bc1989b3035a69ad9904203d x86/vmx: don't call __vmxoff() blindly If vmx_vcpu_up() failed, __vmxon() would generally not have got (successfully) executed, and in that case __vmxoff() will #UD. Additionally, any panic() during early resume (namely the tboot related one) would cause vmx_cpu_down() to get executed without vmx_cpu_up() having run before. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> xen-unstable changeset: 23848:cf37d2eec2ef xen-unstable date: Sat Sep 17 16:26:37 2011 +0100 --- diff -r c5554f952a82 -r 7d13e08b5120 xen/arch/x86/hvm/vmx/vmcs.c --- a/xen/arch/x86/hvm/vmx/vmcs.c Sat Sep 17 16:37:56 2011 +0100 +++ b/xen/arch/x86/hvm/vmx/vmcs.c Sat Sep 17 16:38:31 2011 +0100 @@ -70,6 +70,7 @@ static DEFINE_PER_CPU_READ_MOSTLY(struct vmcs_struct *, vmxon_region); static DEFINE_PER_CPU(struct vmcs_struct *, current_vmcs); static DEFINE_PER_CPU(struct list_head, active_vmcs_list); +static DEFINE_PER_CPU(bool_t, vmxon); static u32 vmcs_revision_id __read_mostly; @@ -517,6 +518,7 @@ printk("CPU%d: unexpected VMXON failure\n", cpu); return -EINVAL; case 0: /* success */ + this_cpu(vmxon) = 1; break; default: BUG(); @@ -538,6 +540,9 @@ struct list_head *active_vmcs_list = &this_cpu(active_vmcs_list); unsigned long flags; + if ( !this_cpu(vmxon) ) + return; + local_irq_save(flags); while ( !list_empty(active_vmcs_list) ) @@ -545,6 +550,7 @@ struct vcpu, arch.hvm_vmx.active_list)); BUG_ON(!(read_cr4() & X86_CR4_VMXE)); + this_cpu(vmxon) = 0; __vmxoff(); local_irq_restore(flags); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |