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 <len.brown@intel.com>,
Pavel Machek <pavel@ucw.cz>,
x86@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>,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org
Subject: [Patch V3 11/16] x86, irq, ACPI: Introduce a rwsem to protect IOAPIC operations from hotplug
Date: Wed, 25 Jun 2014 16:40:42 +0800 [thread overview]
Message-ID: <1403685648-10103-12-git-send-email-jiang.liu@linux.intel.com> (raw)
In-Reply-To: <1403685648-10103-1-git-send-email-jiang.liu@linux.intel.com>
We are going to support ACPI based IOAPIC hotplug, so introduce a rwsem
to protect IOAPIC data structures from IOAPIC hotplug. We choose to
serialize in ACPI instead of in the IOAPIC core because:
1) currently we are only plan to support ACPI based IOAPIC hotplug
2) it's much more clean and easy
3) It does't affect IOAPIC discovered by devicetree, SFI and mppparse.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
---
arch/x86/kernel/acpi/boot.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 8c28023924bf..120b573f1e96 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -76,6 +76,8 @@ int acpi_fix_pin2_polarity __initdata;
static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
#endif
+static DECLARE_RWSEM(acpi_ioapic_rwsem);
+
#ifndef __HAVE_ARCH_CMPXCHG
#warning ACPI uses CMPXCHG, i486 and later hardware
#endif
@@ -608,8 +610,11 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
{
- int irq = mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
+ int irq;
+ down_read(&acpi_ioapic_rwsem);
+ irq = mp_map_gsi_to_irq(gsi, IOAPIC_MAP_ALLOC | IOAPIC_MAP_CHECK);
+ up_read(&acpi_ioapic_rwsem);
if (irq >= 0) {
*irqp = irq;
return 0;
@@ -650,7 +655,9 @@ static int acpi_register_gsi_ioapic(struct device *dev, u32 gsi,
int irq = gsi;
#ifdef CONFIG_X86_IO_APIC
+ down_read(&acpi_ioapic_rwsem);
irq = mp_register_gsi(dev, gsi, trigger, polarity);
+ up_read(&acpi_ioapic_rwsem);
#endif
return irq;
@@ -659,7 +666,9 @@ static int acpi_register_gsi_ioapic(struct device *dev, u32 gsi,
static void acpi_unregister_gsi_ioapic(u32 gsi)
{
#ifdef CONFIG_X86_IO_APIC
+ down_read(&acpi_ioapic_rwsem);
mp_unregister_gsi(gsi);
+ up_read(&acpi_ioapic_rwsem);
#endif
}
@@ -1185,7 +1194,9 @@ static void __init acpi_process_madt(void)
/*
* Parse MADT IO-APIC entries
*/
+ down_write(&acpi_ioapic_rwsem);
error = acpi_parse_madt_ioapic_entries();
+ up_write(&acpi_ioapic_rwsem);
if (!error) {
acpi_set_irq_model_ioapic();
--
1.7.10.4
next prev parent reply other threads:[~2014-06-25 8:40 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 ` [Patch V3 01/16] x86, irq, ACPI: Protect acpi_pci_irq_enable() from reentrance Jiang Liu
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 ` Jiang Liu [this message]
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-12-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=len.brown@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pavel@ucw.cz \
--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.