From 9d7799b4c467675b8db842b821cfff1986be7264 Mon Sep 17 00:00:00 2001 From: Joerg Roedel Date: Wed, 26 Sep 2012 12:44:47 +0200 Subject: [PATCH] --- yaml --- r: 350197 b: refs/heads/master c: 11b4a1cc3836ac71a214446d350e923c76012368 h: refs/heads/master i: 350195: f823bb0b0d28c76b0fd77ed7f3ca54958ab6a48f v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/apic/io_apic.c | 4 ++-- trunk/drivers/iommu/irq_remapping.c | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index a884538e6f54..9fc69204b4b2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9f9d39e403faf5e1a22334fe4df96516e4f389a8 +refs/heads/master: 11b4a1cc3836ac71a214446d350e923c76012368 diff --git a/trunk/arch/x86/kernel/apic/io_apic.c b/trunk/arch/x86/kernel/apic/io_apic.c index 5b7eb70c143c..110483906dd3 100644 --- a/trunk/arch/x86/kernel/apic/io_apic.c +++ b/trunk/arch/x86/kernel/apic/io_apic.c @@ -3003,8 +3003,8 @@ void destroy_irq(unsigned int irq) irq_set_status_flags(irq, IRQ_NOREQUEST|IRQ_NOPROBE); - if (irq_remapped(cfg)) - free_remapped_irq(irq); + free_remapped_irq(irq); + raw_spin_lock_irqsave(&vector_lock, flags); __clear_irq_vector(irq, cfg); raw_spin_unlock_irqrestore(&vector_lock, flags); diff --git a/trunk/drivers/iommu/irq_remapping.c b/trunk/drivers/iommu/irq_remapping.c index 75afdf43317c..cff04789e1a3 100644 --- a/trunk/drivers/iommu/irq_remapping.c +++ b/trunk/drivers/iommu/irq_remapping.c @@ -282,10 +282,13 @@ int set_remapped_irq_affinity(struct irq_data *data, const struct cpumask *mask, void free_remapped_irq(int irq) { + struct irq_cfg *cfg = irq_get_chip_data(irq); + if (!remap_ops || !remap_ops->free_irq) return; - remap_ops->free_irq(irq); + if (irq_remapped(cfg)) + remap_ops->free_irq(irq); } void compose_remapped_msi_msg(struct pci_dev *pdev,