• Lukas Wunner's avatar
    genirq: Remove WARN_ON_ONCE() in generic_handle_domain_irq() · 792ea6a0
    Lukas Wunner authored
    Since commit 0953fb26 ("irq: remove handle_domain_{irq,nmi}()"),
    generic_handle_domain_irq() warns if called outside hardirq context, even
    though the function calls down to handle_irq_desc(), which warns about the
    same, but conditionally on handle_enforce_irqctx().
    
    The newly added warning is a false positive if the interrupt originates
    from any other irqchip than x86 APIC or ARM GIC/GICv3.  Those are the only
    ones for which handle_enforce_irqctx() returns true.  Per commit
    c16816ac ("genirq: Add protection against unsafe usage of
    generic_handle_irq()"):
    
     "In general calling generic_handle_irq() with interrupts disabled from non
      interrupt context is harmless. For some interrupt controllers like the
      x86 trainwrecks this is outright dangerous as it might corrupt state if
      an interrupt affinity change is pending."
    
    Examples for interrupt chips where the warning is a false positive are
    USB-attached GPIO controllers such as drivers/gpio/gpio-dln2.c:
    
      USB gadgets are incapable of directly signaling an interrupt because they
      cannot initiate a bus transaction by themselves.  All communication on
      the bus is initiated by the host controller, which polls a gadget's
      Interrupt Endpoint in regular intervals.  If an interrupt is pending,
      that information is passed up the stack in softirq context, from which a
      hardirq is synthesized via generic_handle_domain_irq().
    
    Remove the warning to eliminate such false positives.
    
    Fixes: 0953fb26 ("irq: remove handle_domain_{irq,nmi}()")
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    CC: Linus Walleij <linus.walleij@linaro.org>
    Cc: Bartosz Golaszewski <brgl@bgdev.pl>
    Cc: Octavian Purdila <octavian.purdila@nxp.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20220505113207.487861b2@kernel.org
    Link: https://lore.kernel.org/r/20220506203242.GA1855@wunner.de
    Link: https://lore.kernel.org/r/c3caf60bfa78e5fdbdf483096b7174da65d1813a.1652168866.git.lukas@wunner.de
    792ea6a0
irqdesc.c 22.9 KB