On Mon, May 16, 2022 at 08:29:50AM +0200, Sebastian Andrzej Siewior wrote: > From looking at gpio-dln2 > this is called from USB URB's callback which is softirq. In the end > dln2_gpio_event() is invoked while dln2_dev::event_cb_lock is acquired. > That lock is acquired by disabling interrupts which is what gets the > locking right for generic_handle_domain_irq(). If that lock lifted to > spin_lock_bh() (because it is always in urb's calback context and all > HCDs complete in one context unlike now) then this breaks. I think you want WARN_ON(!irqs_disabled) to catch that, not WARN_ON_ONCE(!in_hardirq()). > and sadly I missed dln2. Please let me know if you have more users > similar to dln2. I will add those to my list once upstream buys that > interface. There's another USB GPIO irqchip queued up for 5.19 now: https://git.kernel.org/netdev/net-next/c/1ce8b37241ed And there's one more in drivers/hid/hid-cp2112.c, but that calls handle_nested_irq(), which disables hardirqs. Thanks, Lukas