[patch] fix intr-remap with dyn_array/nr_irqs changes

From: Suresh Siddha
Date: Tue Aug 19 2008 - 14:55:52 EST


I didn't find time to closely review the dyn_array/nr_irqs changes. But
the appended patch is needed to fix the broken intr-remapping support on
x86/tip

And also, I don't see any locks used in to_irq_desc_with_new(). How are
we handling the concurrent usage scenarios. And also, this code can use
some cleanups (like the names, to_irq_desc_with_new()?) etc.

thanks,
suresh
---

In irq_2_iommu_with_new() and set_irte_irq(), irq_desc or
irq_2_iommu pointers may not be allocated. So use the routines which
will allocate them if they are not already allocated.

Signed-off-by: Suresh Siddha <suresh.b.siddha@xxxxxxxxx>
---

diff --git a/drivers/pci/intr_remapping.c b/drivers/pci/intr_remapping.c
index 3593f0f..fbd82ff 100644
--- a/drivers/pci/intr_remapping.c
+++ b/drivers/pci/intr_remapping.c
@@ -76,7 +76,10 @@ static struct irq_2_iommu *irq_2_iommu_with_new(unsigned int irq)
struct irq_desc *desc;
struct irq_2_iommu *irq_iommu;

- desc = to_irq_desc(irq);
+ /*
+ * alloc irq desc if not allocated already.
+ */
+ desc = to_irq_desc_with_new(irq);

BUG_ON(!desc);

@@ -255,11 +258,7 @@ int set_irte_irq(int irq, struct intel_iommu *iommu, u16 index, u16 subhandle)
struct irq_2_iommu *irq_iommu;

spin_lock(&irq_2_ir_lock);
- irq_iommu = valid_irq_2_iommu(irq);
- if (!irq_iommu) {
- spin_unlock(&irq_2_ir_lock);
- return -1;
- }
+ irq_iommu = irq_2_iommu_with_new(irq);

irq_iommu->iommu = iommu;
irq_iommu->irte_index = index;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/