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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux