All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <jiang.liu@linux.intel.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Yinghai Lu <yinghai@kernel.org>, Len Brown <lenb@kernel.org>
Cc: Jiang Liu <jiang.liu@linux.intel.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Tony Luck <tony.luck@intel.com>, Joerg Roedel <joro@8bytes.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org
Subject: [Patch V3 01/16] x86, irq, ACPI: Protect acpi_pci_irq_enable() from reentrance
Date: Wed, 25 Jun 2014 16:40:32 +0800	[thread overview]
Message-ID: <1403685648-10103-2-git-send-email-jiang.liu@linux.intel.com> (raw)
In-Reply-To: <1403685648-10103-1-git-send-email-jiang.liu@linux.intel.com>

Function acpi_pci_irq_enable() may be called twice for each PCI device
present at boot time as below:
1) pci_acpi_init()
	--> acpi_pci_irq_enable()
2) pci_enable_device()
	--> pcibios_enable_device()
		--> acpi_pci_irq_enable()

So protect acpi_pci_irq_enable() from reentrance to correctly manage
IOAPIC pin reference count.

Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
---
 drivers/acpi/pci_irq.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
index 6ba463ceccc6..9d2ebd5fd9aa 100644
--- a/drivers/acpi/pci_irq.c
+++ b/drivers/acpi/pci_irq.c
@@ -413,6 +413,9 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
 		return 0;
 	}
 
+	if (dev->irq > 0)
+		return 0;
+
 	entry = acpi_pci_irq_lookup(dev, pin);
 	if (!entry) {
 		/*
@@ -498,6 +501,8 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
 	 */
 
 	dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
-	if (gsi >= 0 && dev->irq > 0)
+	if (gsi >= 0 && dev->irq > 0) {
 		acpi_unregister_gsi(gsi);
+		dev->irq = 0;
+	}
 }
-- 
1.7.10.4


  reply	other threads:[~2014-06-25  8:38 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-25  8:40 [Patch V3 00/16] Enable support of IOAPIC hotplug on x86 platforms Jiang Liu
2014-06-25  8:40 ` Jiang Liu [this message]
2014-06-25  8:40 ` [Patch V3 02/16] ACPI: Make map_mat_entry handle x2apic entry Jiang Liu
2014-06-25  8:40 ` [Patch V3 03/16] ACPI: Correct return value of acpi_dev_resource_address_space() Jiang Liu
2014-06-25  8:40 ` [Patch V3 04/16] x86, PCI, ACPI: Kill private function resource_to_addr() Jiang Liu
2014-06-25  8:40 ` [Patch V3 05/16] ACPI: Move acpi_get_cpuid() to separated file Jiang Liu
2014-06-25  8:40 ` [Patch V3 06/16] x86, irq: Split out alloc_ioapic_save_registers() Jiang Liu
2014-06-25  8:40 ` [Patch V3 07/16] x86, ioapic: Find usable ioapic id for 64bit Jiang Liu
2014-06-25  8:40 ` [Patch V3 08/16] ACPI, ioapic: Add acpi_get_ioapic_id() Jiang Liu
2014-06-25  8:40 ` [Patch V3 09/16] x86, irq: Remove __init marker for functions will be used by IOAPIC hotplug Jiang Liu
2014-06-25  8:40 ` [Patch V3 10/16] x86, irq: Refine mp_register_ioapic() to prepare for " Jiang Liu
2014-06-25  8:40 ` [Patch V3 11/16] x86, irq, ACPI: Introduce a rwsem to protect IOAPIC operations from hotplug Jiang Liu
2014-06-25  8:40 ` [Patch V3 12/16] x86, irq, ACPI: Implement interface to support ACPI based IOAPIC hot-addition Jiang Liu
2014-06-25  8:40 ` [Patch V3 13/16] x86, irq, ACPI: Implement interface to support ACPI based IOAPIC hot-removal Jiang Liu
2014-06-25  8:40 ` [Patch V3 14/16] x86, irq: Introduce helper to check whether an IOAPIC has been registered Jiang Liu
2014-06-25  8:40 ` [Patch V3 15/16] PCI: Remove PCI ioapic driver Jiang Liu
2014-06-25  8:40 ` [Patch V3 16/16] x86, irq, ACPI: Implement ACPI driver to support IOAPIC hotplug Jiang Liu
2014-06-25 14:44 ` [Patch V3 00/16] Enable support of IOAPIC hotplug on x86 platforms Konrad Rzeszutek Wilk
2014-06-27 14:43   ` Jiang Liu
2014-07-14 17:26 ` Konrad Rzeszutek Wilk
2014-07-14 19:41   ` Konrad Rzeszutek Wilk
2014-07-15 15:27     ` Jiang Liu
2014-07-15 16:10       ` Konrad Rzeszutek Wilk
2014-07-16  3:01         ` Jiang Liu
2014-07-16 13:33           ` Konrad Rzeszutek Wilk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1403685648-10103-2-git-send-email-jiang.liu@linux.intel.com \
    --to=jiang.liu@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=joro@8bytes.org \
    --cc=konrad.wilk@oracle.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.