Commit 6932bf37bed45ce8ed531928b1b0f98162fe6df6

Authored by Thomas Gleixner
1 parent e58aa3d2d0

genirq: Remove IRQF_DISABLED from core code

Remove all code which is related to IRQF_DISABLED from the core kernel
code. IRQF_DISABLED still exists as a flag, but becomes a NOOP and
will be removed after a grace period. That way we can easily revert to
the previous behaviour by just restoring the core code.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Miller <davem@davemloft.net>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Linus Torvalds <torvalds@osdl.org>
LKML-Reference: <20100326000405.991244690@linutronix.de>

Showing 3 changed files with 9 additions and 31 deletions Side-by-side Diff

Documentation/feature-removal-schedule.txt
... ... @@ -589,4 +589,11 @@
589 589 Generally invoked by accident today.
590 590 Seen as doing more harm than good.
591 591 Who: Len Brown <len.brown@intel.com>
  592 +
  593 +----------------------------
  594 +
  595 +What: IRQF_DISABLED
  596 +When: 2.6.36
  597 +Why: The flag is a NOOP as we run interrupt handlers with interrupts disabled
  598 +Who: Thomas Gleixner <tglx@linutronix.de>
include/linux/interrupt.h
... ... @@ -39,7 +39,8 @@
39 39 * These flags used only by the kernel as part of the
40 40 * irq handling routines.
41 41 *
42   - * IRQF_DISABLED - keep irqs disabled when calling the action handler
  42 + * IRQF_DISABLED - keep irqs disabled when calling the action handler.
  43 + * DEPRECATED. This flag is a NOOP and scheduled to be removed
43 44 * IRQF_SAMPLE_RANDOM - irq is used to feed the random generator
44 45 * IRQF_SHARED - allow sharing the irq among several devices
45 46 * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur
... ... @@ -757,16 +757,6 @@
757 757 if (new->flags & IRQF_ONESHOT)
758 758 desc->status |= IRQ_ONESHOT;
759 759  
760   - /*
761   - * Force MSI interrupts to run with interrupts
762   - * disabled. The multi vector cards can cause stack
763   - * overflows due to nested interrupts when enough of
764   - * them are directed to a core and fire at the same
765   - * time.
766   - */
767   - if (desc->msi_desc)
768   - new->flags |= IRQF_DISABLED;
769   -
770 760 if (!(desc->status & IRQ_NOAUTOEN)) {
771 761 desc->depth = 0;
772 762 desc->status &= ~IRQ_DISABLED;
... ... @@ -1027,7 +1017,6 @@
1027 1017 * Flags:
1028 1018 *
1029 1019 * IRQF_SHARED Interrupt is shared
1030   - * IRQF_DISABLED Disable local interrupts while processing
1031 1020 * IRQF_SAMPLE_RANDOM The interrupt can be used for entropy
1032 1021 * IRQF_TRIGGER_* Specify active edge(s) or level
1033 1022 *
... ... @@ -1040,25 +1029,6 @@
1040 1029 struct irq_desc *desc;
1041 1030 int retval;
1042 1031  
1043   - /*
1044   - * handle_IRQ_event() always ignores IRQF_DISABLED except for
1045   - * the _first_ irqaction (sigh). That can cause oopsing, but
1046   - * the behavior is classified as "will not fix" so we need to
1047   - * start nudging drivers away from using that idiom.
1048   - */
1049   - if ((irqflags & (IRQF_SHARED|IRQF_DISABLED)) ==
1050   - (IRQF_SHARED|IRQF_DISABLED)) {
1051   - pr_warning(
1052   - "IRQ %d/%s: IRQF_DISABLED is not guaranteed on shared IRQs\n",
1053   - irq, devname);
1054   - }
1055   -
1056   -#ifdef CONFIG_LOCKDEP
1057   - /*
1058   - * Lockdep wants atomic interrupt handlers:
1059   - */
1060   - irqflags |= IRQF_DISABLED;
1061   -#endif
1062 1032 /*
1063 1033 * Sanity-check: shared interrupts must pass in a real dev-ID,
1064 1034 * otherwise we'll have trouble later trying to figure out