On Mon, Jul 8, 2024 at 3:51 PM Wysocki, Rafael J <rafael.j.wysocki@xxxxxxxxx> wrote: > > 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! So can you please check if the attached patch helps?
--- include/linux/interrupt.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-pm/include/linux/interrupt.h =================================================================== --- linux-pm.orig/include/linux/interrupt.h +++ linux-pm/include/linux/interrupt.h @@ -168,7 +168,8 @@ static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) { - return request_threaded_irq(irq, handler, NULL, flags, name, dev); + return request_threaded_irq(irq, handler, NULL, + flags | IRQF_COND_ONESHOT, name, dev); } extern int __must_check