linux/kernel/irq
Linus Torvalds 69dd3d8e29 Revert "irq: Always set IRQF_ONESHOT if no primary handler is specified"
This reverts commit f3637a5f2e.

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: Paul Walmsley <paul@pwsan.com>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Requested-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-23 10:36:51 -07:00
..
autoprobe.c genirq: Remove compat code 2011-03-29 14:48:19 +02:00
chip.c irq: Export functions to allow modular irq drivers 2011-05-18 14:59:08 +02:00
debug.h genirq: Support per-IRQ thread disabling. 2011-04-23 15:56:24 +02:00
devres.c devres: fix possible use after free 2011-07-25 20:57:14 -07:00
dummychip.c genirq: Remove compat code 2011-03-29 14:48:19 +02:00
generic-chip.c genirq: Fix wrong bit operation 2011-07-26 16:24:02 +02:00
handle.c irq: Handle spurios irq detection for threaded irqs 2011-06-03 14:53:15 +02:00
internals.h genirq: Remove compat code 2011-03-29 14:48:19 +02:00
irqdesc.c irqdesc: fix new kernel-doc warning 2011-08-18 14:12:48 -07:00
irqdomain.c dt/irq: add irq_domain_generate_simple() helper 2011-07-28 01:32:04 -06:00
Kconfig irq: add irq_domain translation infrastructure 2011-07-28 01:32:04 -06:00
Makefile irq: add irq_domain translation infrastructure 2011-07-28 01:32:04 -06:00
manage.c Revert "irq: Always set IRQF_ONESHOT if no primary handler is specified" 2011-08-23 10:36:51 -07:00
migration.c Fix common misspellings 2011-03-31 11:26:23 -03:00
pm.c genirq: Add chip flag to force mask on suspend 2011-03-12 11:12:58 +01:00
proc.c irq: Remove smp_affinity_list when unregister irq proc 2011-05-26 13:15:28 +02:00
resend.c genirq: Remove compat code 2011-03-29 14:48:19 +02:00
settings.h genirq: Support per-IRQ thread disabling. 2011-04-23 15:56:24 +02:00
spurious.c irq: Handle spurios irq detection for threaded irqs 2011-06-03 14:53:15 +02:00