mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
vt-d: avoid obtaining iommu->register_lock too early in
dma_msi_set_affinity() If set_desc_affinity() fails, the current code doesn't release the spinlock. We should obtain the lock at a later place. Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
This commit is contained in:
1 parent
ad46d7a628
commit
4fe3160cbc
1 file changed
+1
-1
@@ -826,7 +826,6 @@ static void dma_msi_set_affinity(unsigned int irq, cpumask_t mask)
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
struct irq_cfg *cfg = desc->chip_data;
|
||||
|
||||
spin_lock_irqsave(&iommu->register_lock, flags);
|
||||
#ifdef CONFIG_X86
|
||||
dest = set_desc_affinity(desc, mask);
|
||||
if (dest == BAD_APICID){
|
||||
@@ -862,6 +861,7 @@ static void dma_msi_set_affinity(unsigned int irq, cpumask_t mask)
|
||||
msg.address_lo |= dest << MSI_TARGET_CPU_SHIFT;
|
||||
#endif
|
||||
|
||||
spin_lock_irqsave(&iommu->register_lock, flags);
|
||||
dmar_writel(iommu->reg, DMAR_FEDATA_REG, msg.data);
|
||||
dmar_writel(iommu->reg, DMAR_FEADDR_REG, msg.address_lo);
|
||||
dmar_writel(iommu->reg, DMAR_FEUADDR_REG, msg.address_hi);
|
||||
|
||||