On 31 July 2018 at 00:42, Bjorn Helgaas <helgaas@xxxxxxxxxx> wrote: > [+cc maintainers of possibly erroneous callers of request_threaded_irq()] > > On Mon, Jul 30, 2018 at 04:30:28PM -0500, Bjorn Helgaas wrote: >> [+cc Thomas, Christoph, LKML] >> >> On Mon, Jul 30, 2018 at 12:03:42AM +0200, Heiner Kallweit wrote: >> > If we have a threaded interrupt with the handler being NULL, then >> > request_threaded_irq() -> __setup_irq() will complain and bail out >> > if the IRQF_ONESHOT flag isn't set. Therefore check for the handler >> > being NULL and set IRQF_ONESHOT in this case. >> > >> > This change is needed to migrate the mei_me driver to >> > pci_alloc_irq_vectors() and pci_request_irq(). >> > >> > Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> >> >> I'd like an ack from Thomas because this requirement about IRQF_ONESHOT >> usage isn't mentioned in the request_threaded_irq() function doc or >> Documentation/ > > Possibly these other request_threaded_irq() callers are similarly > broken? I can't tell for sure about tda998x_create(), but all the > others certainly call request_threaded_irq() with "handler == NULL" > and irqflags that do not contain IRQF_ONESHOT: > > max8997_muic_probe() > request_threaded_irq(virq, NULL, ..., IRQF_NO_SUSPEND, ...) > > tda998x_create() > request_threaded_irq(client->irq, NULL, ..., irqd_get_trigger_type(), ...) > (I can't tell what irqd_get_trigger_type() does) > > ab8500_btemp_probe() > ab8500_charger_probe() > request_threaded_irq(irq, NULL, ..., IRQF_SHARED | IRQF_NO_SUSPEND, ...) > > lp8788_set_irqs() > request_threaded_irq(virq, NULL, ..., 0, ...) > > max77686_rtc_probe() > request_threaded_irq(info->virq, NULL, ..., 0, ...) max77686 works fine because it it is nested IRQ. Parent has ONESHOT flag set. Best regards, Krzysztof