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:
Keir Fraser committed 2009-09-07 13:49:35 +01:00
1 parent ad46d7a628
commit 4fe3160cbc
1 file changed
+1 -1
+1 -1
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.