[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] vt-d: Fix double spin_lock_irqsave().



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1215680852 -3600
# Node ID a891e0f6ff189647a96e810c47602ff419c7bf22
# Parent  463e410fb0fdab3d79c1f3139028acd90b9498af
vt-d: Fix double spin_lock_irqsave().

The duplicate spin_lock_irqsave() flushes the original EFLAGS saved,
and thus disables local irqs permanently.

Signed-off-by: Xin, Xiaohui <Xiaohui.xin@xxxxxxxxx>
Signed-off-by: Tian, Kevin <Kevin.Tian@xxxxxxxxx>
---
 xen/arch/x86/hvm/vmx/vmx.c           |    3 +++
 xen/drivers/passthrough/vtd/qinval.c |    4 ++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff -r 463e410fb0fd -r a891e0f6ff18 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c        Thu Jul 10 10:02:15 2008 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c        Thu Jul 10 10:07:32 2008 +0100
@@ -1086,7 +1086,10 @@ void ept_sync_domain(struct domain *d)
 {
     /* Only if using EPT and this domain has some VCPUs to dirty. */
     if ( d->arch.hvm_domain.hap_enabled && d->vcpu[0] )
+    {
+        ASSERT(local_irq_is_enabled());
         on_each_cpu(__ept_sync_domain, d, 1, 1);
+    }
 }
 
 static void __vmx_inject_exception(
diff -r 463e410fb0fd -r a891e0f6ff18 xen/drivers/passthrough/vtd/qinval.c
--- a/xen/drivers/passthrough/vtd/qinval.c      Thu Jul 10 10:02:15 2008 +0100
+++ b/xen/drivers/passthrough/vtd/qinval.c      Thu Jul 10 10:07:32 2008 +0100
@@ -190,13 +190,13 @@ static int queue_invalidate_wait(struct 
     struct qi_ctrl *qi_ctrl = iommu_qi_ctrl(iommu);
 
     spin_lock_irqsave(&qi_ctrl->qinval_poll_lock, flags);
-    spin_lock_irqsave(&iommu->register_lock, flags);
+    spin_lock(&iommu->register_lock);
     index = qinval_next_index(iommu);
     if ( *saddr == 1 )
         *saddr = 0;
     ret = gen_wait_dsc(iommu, index, iflag, sw, fn, sdata, saddr);
     ret |= qinval_update_qtail(iommu, index);
-    spin_unlock_irqrestore(&iommu->register_lock, flags);
+    spin_unlock(&iommu->register_lock);
 
     /* Now we don't support interrupt method */
     if ( sw )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.