debuggers.hg
changeset 18053:a891e0f6ff18
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@intel.com>
Signed-off-by: Tian, Kevin <Kevin.Tian@intel.com>
The duplicate spin_lock_irqsave() flushes the original EFLAGS saved,
and thus disables local irqs permanently.
Signed-off-by: Xin, Xiaohui <Xiaohui.xin@intel.com>
Signed-off-by: Tian, Kevin <Kevin.Tian@intel.com>
author | Keir Fraser <keir.fraser@citrix.com> |
---|---|
date | Thu Jul 10 10:07:32 2008 +0100 (2008-07-10) |
parents | 463e410fb0fd |
children | aab9fbd6ffa0 |
files | xen/arch/x86/hvm/vmx/vmx.c xen/drivers/passthrough/vtd/qinval.c |
line diff
1.1 --- a/xen/arch/x86/hvm/vmx/vmx.c Thu Jul 10 10:02:15 2008 +0100 1.2 +++ b/xen/arch/x86/hvm/vmx/vmx.c Thu Jul 10 10:07:32 2008 +0100 1.3 @@ -1086,7 +1086,10 @@ void ept_sync_domain(struct domain *d) 1.4 { 1.5 /* Only if using EPT and this domain has some VCPUs to dirty. */ 1.6 if ( d->arch.hvm_domain.hap_enabled && d->vcpu[0] ) 1.7 + { 1.8 + ASSERT(local_irq_is_enabled()); 1.9 on_each_cpu(__ept_sync_domain, d, 1, 1); 1.10 + } 1.11 } 1.12 1.13 static void __vmx_inject_exception(
2.1 --- a/xen/drivers/passthrough/vtd/qinval.c Thu Jul 10 10:02:15 2008 +0100 2.2 +++ b/xen/drivers/passthrough/vtd/qinval.c Thu Jul 10 10:07:32 2008 +0100 2.3 @@ -190,13 +190,13 @@ static int queue_invalidate_wait(struct 2.4 struct qi_ctrl *qi_ctrl = iommu_qi_ctrl(iommu); 2.5 2.6 spin_lock_irqsave(&qi_ctrl->qinval_poll_lock, flags); 2.7 - spin_lock_irqsave(&iommu->register_lock, flags); 2.8 + spin_lock(&iommu->register_lock); 2.9 index = qinval_next_index(iommu); 2.10 if ( *saddr == 1 ) 2.11 *saddr = 0; 2.12 ret = gen_wait_dsc(iommu, index, iflag, sw, fn, sdata, saddr); 2.13 ret |= qinval_update_qtail(iommu, index); 2.14 - spin_unlock_irqrestore(&iommu->register_lock, flags); 2.15 + spin_unlock(&iommu->register_lock); 2.16 2.17 /* Now we don't support interrupt method */ 2.18 if ( sw )