Commit 72895bf8 authored by Jiang Liu's avatar Jiang Liu Committed by Sasha Levin

x86/xen: Override ACPI IRQ management callback __acpi_unregister_gsi

[ Upstream commit 8abb850a ]

Xen overrides __acpi_register_gsi and leaves __acpi_unregister_gsi as is.
That means, an IRQ allocated by acpi_register_gsi_xen_hvm() or
acpi_register_gsi_xen() will be freed by acpi_unregister_gsi_ioapic(),
which may cause undesired effects. So override __acpi_unregister_gsi to
NULL for safety.
Signed-off-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
Tested-by: default avatarSander Eikelenboom <linux@eikelenboom.it>
Cc: Tony Luck <tony.luck@intel.com>
Cc: xen-devel@lists.xenproject.org
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Graeme Gregory <graeme.gregory@linaro.org>
Cc: Lv Zheng <lv.zheng@intel.com>
Link: http://lkml.kernel.org/r/1421720467-7709-4-git-send-email-jiang.liu@linux.intel.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 40623922
...@@ -50,6 +50,7 @@ void acpi_pic_sci_set_trigger(unsigned int, u16); ...@@ -50,6 +50,7 @@ void acpi_pic_sci_set_trigger(unsigned int, u16);
extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi, extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi,
int trigger, int polarity); int trigger, int polarity);
extern void (*__acpi_unregister_gsi)(u32 gsi);
static inline void disable_acpi(void) static inline void disable_acpi(void)
{ {
......
...@@ -442,6 +442,7 @@ int __init pci_xen_hvm_init(void) ...@@ -442,6 +442,7 @@ int __init pci_xen_hvm_init(void)
* just how GSIs get registered. * just how GSIs get registered.
*/ */
__acpi_register_gsi = acpi_register_gsi_xen_hvm; __acpi_register_gsi = acpi_register_gsi_xen_hvm;
__acpi_unregister_gsi = NULL;
#endif #endif
#ifdef CONFIG_PCI_MSI #ifdef CONFIG_PCI_MSI
...@@ -464,6 +465,7 @@ int __init pci_xen_initial_domain(void) ...@@ -464,6 +465,7 @@ int __init pci_xen_initial_domain(void)
x86_msi.msix_mask_irq = xen_nop_msix_mask_irq; x86_msi.msix_mask_irq = xen_nop_msix_mask_irq;
#endif #endif
__acpi_register_gsi = acpi_register_gsi_xen; __acpi_register_gsi = acpi_register_gsi_xen;
__acpi_unregister_gsi = NULL;
/* Pre-allocate legacy irqs */ /* Pre-allocate legacy irqs */
for (irq = 0; irq < nr_legacy_irqs(); irq++) { for (irq = 0; irq < nr_legacy_irqs(); irq++) {
int trigger, polarity; int trigger, polarity;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment