Re: Regression in 6.8 from "ACPI: OSL: Use a threaded interrupt handler for SCI"

From: Wysocki, Rafael J
Date: Mon Jul 08 2024 - 09:51:51 EST


Hi,

On 7/8/2024 10:07 AM, Stefan Seyfried wrote:
Hi all,

any kernels after 6.7 break my trusty old Toughbook CF-51 by rendering many PCI devices unusable.

I did first notice that i915 did no longer work and filed
https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11437, there I was pointed to commit

commit 7a36b901a6eb0e9945341db71ed3c45c7721cfa9
Author: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
Date:   Mon Nov 27 20:57:43 2023 +0100

    ACPI: OSL: Use a threaded interrupt handler for SCI

which I verified with a week-long bisecting from 6.7 to 6.8 (just for fun :-)

Thanks for reporting this, although it would be nice to put linux-acpi on the CC.


Just reverting this commit top of 6.10-rc5 (sorry, this machine is not very powerful so I did not try the latest git master) makes everything work fine again.

I get these messages in dmesg when running the broken kernels:

[  T308] genirq: Flags mismatch irq 9. 00000080 (yenta) vs. 00002080 (acpi)
[  T305] genirq: Flags mismatch irq 9. 00000080 (uhci_hcd:usb1) vs. 00002080 (acpi)
[  T305] genirq: Flags mismatch irq 9. 00000080 (uhci_hcd:usb1) vs. 00002080 (acpi)
[   T46] genirq: Flags mismatch irq 9. 00000080 (ehci_hcd:usb1) vs. 00002080 (acpi)
[  T312] genirq: Flags mismatch irq 9. 00000080 (firewire_ohci) vs. 00002080 (acpi)
[  T305] genirq: Flags mismatch irq 9. 00000080 (uhci_hcd:usb1) vs. 00002080 (acpi)
[  T308] genirq: Flags mismatch irq 9. 00000080 (yenta) vs. 00002080 (acpi)
[  T592] genirq: Flags mismatch irq 9. 00000080 (snd_intel8x0) vs. 00002080 (acpi)
[  T581] genirq: Flags mismatch irq 9. 00000080 (i915) vs. 00002080 (acpi)
[  T874] genirq: Flags mismatch irq 9. 00000080 (enp2s1) vs. 00002080 (acpi)

These are not present with that commit reverted.

So all of the drivers above attempt to share the IRQ with the SCI and they don't use IRQF_ONESHOT and because they all are threaded, there is a flags conflict.

They all need to be made pass IRQF_COND_ONESHOT when requesting interrupts and it will all work again.

I'll send you a patch for this (hopefully later today), but I guess it will take a while until it gets absorbed.

Thanks!