• Linus Torvalds's avatar
    Revert "irq: Always set IRQF_ONESHOT if no primary handler is specified" · 69dd3d8e
    Linus Torvalds authored
    This reverts commit f3637a5f.
    
    It turns out that this breaks several drivers, one example being OMAP
    boards which use the on-board OMAP UARTs and the omap-serial driver that
    will not boot to userspace after the commit.
    
    Paul Walmsley reports that enabling CONFIG_DEBUG_SHIRQ reveals 'IRQ
    handler type mismatch' errors:
    
      IRQ handler type mismatch for IRQ 74
      current handler: serial idle
      ...
    
    and the reason is that setting IRQF_ONESHOT will now result in those
    interrupt handlers having different IRQF flags, and thus being
    unsharable.  So the commit log in the reverted commit:
    
                                "Since it is required for those users and
        there is no difference for others it makes sense to add this flag
        unconditionally."
    
    is simply not true: there may not be any difference from a "actions at
    irq time", but there is a *big* difference wrt this flag testing irq
    management (see __setup_irq() in kernel/irq/manage.c).
    
    One solution may be to stop verifying IRQF_ONESHOT in __setup_irq(), but
    right now the safe course of action is to revert the change.  Let's
    revisit this in a later merge window.
    Reported-by: default avatarPaul Walmsley <paul@pwsan.com>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Requested-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
    Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    69dd3d8e
manage.c 35.5 KB