Patch "x86/acpi: Handle SCI interrupts above legacy space gracefully" has been added to the 4.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/acpi: Handle SCI interrupts above legacy space gracefully
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86-acpi-handle-sci-interrupts-above-legacy-space-gracefully.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
252714155f04c5d16989cb3aadb85fd1b5772f99Mon Sep 17 00:00:00 2001
From: Vikas C Sajjan <[email protected]>
Date: Thu, 16 Nov 2017 21:43:44 +0530
Subject: x86/acpi: Handle SCI interrupts above legacy space gracefully
From: Vikas C Sajjan <[email protected]>
commit 252714155f04c5d16989cb3aadb85fd1b5772f99 upstream.
Platforms which support only IOAPIC mode, pass the SCI information above the legacy space (0-15) via the FADT mechanism and not via MADT.
In such cases mp_override_legacy_irq() which is invoked from acpi_sci_ioapic_setup() to register SCI interrupts fails for interrupts greater equal 16, since it is meant to handle only the legacy space and emits error "Invalid bus_irq %u for legacy override".
Add a new function to handle SCI interrupts >= 16 and invoke it conditionally in acpi_sci_ioapic_setup().
The code duplication due to this new function will be cleaned up in a separate patch.
--- arch/x86/kernel/acpi/boot.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
arch/x86/kernel/acpi/boot.c +33 -1
@@ -429,6 +429,34 @@ static int mp_config_acpi_gsi(struct devreturn 0 ; } +static int __init mp_register_ioapic_irq (u8 bus_irq,u8 polarity, +u8 trigger,u32 gsi) +{ +struct mpc_intsrc mp_irq; +int ioapic, pin; + +/* Convert 'gsi' to 'ioapic.pin'(INTIN#) */ + ioapic =mp_find_ioapic (gsi); +if (ioapic <0 ) { +pr_warn ("Failed to find ioapic for gsi : %u\n" , gsi); +return ioapic; + } + + pin =mp_find_ioapic_pin (ioapic, gsi); + + mp_irq.type =MP_INTSRC ; + mp_irq.irqtype = mp_INT; + mp_irq.irqflag = (trigger <<2 ) | polarity; + mp_irq.srcbus =MP_ISA_BUS ; + mp_irq.srcbusirq = bus_irq; + mp_irq.dstapic =mpc_ioapic_id (ioapic); + mp_irq.dstirq = pin; + +mp_save_irq (&mp_irq); + +return 0 ; +} +static int __init acpi_parse_ioapic (struct acpi_subtable_header * header,const unsigned long end) {
@@ -473,7 +501,11 @@ static void __init acpi_sci_ioapic_setupif (acpi_sci_flags &ACPI_MADT_POLARITY_MASK ) polarity = acpi_sci_flags &ACPI_MADT_POLARITY_MASK ; -mp_override_legacy_irq (bus_irq, polarity, trigger, gsi); +if (bus_irq <NR_IRQS_LEGACY ) +mp_override_legacy_irq (bus_irq, polarity, trigger, gsi); +else +mp_register_ioapic_irq (bus_irq, polarity, trigger, gsi); +acpi_penalize_sci_irq (bus_irq, trigger, polarity);/*
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/x86-acpi-handle-sci-interrupts-above-legacy-space-gracefully.patch