Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

genirq: Remove __do_IRQ

All architectures are finally converted. Remove the cruft.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: David Howells <dhowells@redhat.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Greg Ungerer <gerg@uclinux.org>
Cc: Michal Simek <monstr@monstr.eu>
Acked-by: David Howells <dhowells@redhat.com>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Jeff Dike <jdike@addtoit.com>

-183
-8
Documentation/feature-removal-schedule.txt
··· 357 357 358 358 ----------------------------- 359 359 360 - What: __do_IRQ all in one fits nothing interrupt handler 361 - When: 2.6.32 362 - Why: __do_IRQ was kept for easy migration to the type flow handlers. 363 - More than two years of migration time is enough. 364 - Who: Thomas Gleixner <tglx@linutronix.de> 365 - 366 - ----------------------------- 367 - 368 360 What: fakephp and associated sysfs files in /sys/bus/pci/slots/ 369 361 When: 2011 370 362 Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
-3
arch/alpha/Kconfig
··· 68 68 bool 69 69 default n 70 70 71 - config GENERIC_HARDIRQS_NO__DO_IRQ 72 - def_bool y 73 - 74 71 config GENERIC_HARDIRQS 75 72 bool 76 73 default y
-3
arch/blackfin/Kconfig
··· 50 50 config GENERIC_IRQ_PROBE 51 51 def_bool y 52 52 53 - config GENERIC_HARDIRQS_NO__DO_IRQ 54 - def_bool y 55 - 56 53 config GENERIC_GPIO 57 54 def_bool y 58 55
-4
arch/frv/Kconfig
··· 33 33 bool 34 34 default y 35 35 36 - config GENERIC_HARDIRQS_NO__DO_IRQ 37 - bool 38 - default y 39 - 40 36 config TIME_LOW_RES 41 37 bool 42 38 default y
-3
arch/ia64/Kconfig
··· 684 684 config GENERIC_HARDIRQS 685 685 def_bool y 686 686 687 - config GENERIC_HARDIRQS_NO__DO_IRQ 688 - def_bool y 689 - 690 687 config GENERIC_IRQ_PROBE 691 688 bool 692 689 default y
-4
arch/m68knommu/Kconfig
··· 52 52 bool 53 53 default y 54 54 55 - config GENERIC_HARDIRQS_NO__DO_IRQ 56 - bool 57 - default y 58 - 59 55 config GENERIC_CALIBRATE_DELAY 60 56 bool 61 57 default y
-3
arch/microblaze/Kconfig
··· 52 52 config GENERIC_CLOCKEVENTS 53 53 def_bool y 54 54 55 - config GENERIC_HARDIRQS_NO__DO_IRQ 56 - def_bool y 57 - 58 55 config GENERIC_GPIO 59 56 def_bool y 60 57
-3
arch/mips/Kconfig
··· 793 793 bool 794 794 default y 795 795 796 - config GENERIC_HARDIRQS_NO__DO_IRQ 797 - def_bool y 798 - 799 796 # 800 797 # Select some configuration options automatically based on user selections. 801 798 #
-3
arch/mn10300/Kconfig
··· 34 34 config RWSEM_XCHGADD_ALGORITHM 35 35 bool 36 36 37 - config GENERIC_HARDIRQS_NO__DO_IRQ 38 - def_bool y 39 - 40 37 config GENERIC_CALIBRATE_DELAY 41 38 def_bool y 42 39
-4
arch/parisc/Kconfig
··· 12 12 select HAVE_IRQ_WORK 13 13 select HAVE_PERF_EVENTS 14 14 select GENERIC_ATOMIC64 if !64BIT 15 - select GENERIC_HARDIRQS_NO__DO_IRQ 16 15 help 17 16 The PA-RISC microprocessor is designed by Hewlett-Packard and used 18 17 in many of their workstations & servers (HP9000 700 and 800 series, ··· 77 78 config IRQ_PER_CPU 78 79 bool 79 80 default y 80 - 81 - config GENERIC_HARDIRQS_NO__DO_IRQ 82 - def_bool y 83 81 84 82 # unless you want to implement ACPI on PA-RISC ... ;-) 85 83 config PM
-4
arch/powerpc/Kconfig
··· 40 40 bool 41 41 default y 42 42 43 - config GENERIC_HARDIRQS_NO__DO_IRQ 44 - bool 45 - default y 46 - 47 43 config HAVE_SETUP_PER_CPU_AREA 48 44 def_bool PPC64 49 45
-3
arch/score/Kconfig
··· 53 53 config SCHED_NO_NO_OMIT_FRAME_POINTER 54 54 def_bool y 55 55 56 - config GENERIC_HARDIRQS_NO__DO_IRQ 57 - def_bool y 58 - 59 56 config GENERIC_SYSCALL_TABLE 60 57 def_bool y 61 58
-4
arch/sparc/Kconfig
··· 107 107 config NEED_PER_CPU_PAGE_FIRST_CHUNK 108 108 def_bool y if SPARC64 109 109 110 - config GENERIC_HARDIRQS_NO__DO_IRQ 111 - bool 112 - def_bool y if SPARC64 113 - 114 110 config MMU 115 111 bool 116 112 default y
-3
arch/tile/Kconfig
··· 10 10 config GENERIC_HARDIRQS 11 11 def_bool y 12 12 13 - config GENERIC_HARDIRQS_NO__DO_IRQ 14 - def_bool y 15 - 16 13 config GENERIC_IRQ_PROBE 17 14 def_bool y 18 15
-3
arch/um/Kconfig.um
··· 120 120 121 121 If you don't know what to do, say N. 122 122 123 - config GENERIC_HARDIRQS_NO__DO_IRQ 124 - def_bool y 125 - 126 123 config NR_CPUS 127 124 int "Maximum number of CPUs (2-32)" 128 125 range 2 32
-14
include/linux/irqdesc.h
··· 101 101 #define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc) 102 102 103 103 /* 104 - * Monolithic do_IRQ implementation. 105 - */ 106 - #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ 107 - extern unsigned int __do_IRQ(unsigned int irq); 108 - #endif 109 - 110 - /* 111 104 * Architectures call this to let the generic IRQ layer 112 105 * handle an interrupt. If the descriptor is attached to an 113 106 * irqchip-style controller then we call the ->handle_irq() handler, ··· 108 115 */ 109 116 static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc) 110 117 { 111 - #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ 112 118 desc->handle_irq(irq, desc); 113 - #else 114 - if (likely(desc->handle_irq)) 115 - desc->handle_irq(irq, desc); 116 - else 117 - __do_IRQ(irq); 118 - #endif 119 119 } 120 120 121 121 static inline void generic_handle_irq(unsigned int irq)
-3
kernel/irq/Kconfig
··· 9 9 config GENERIC_HARDIRQS 10 10 def_bool y 11 11 12 - config GENERIC_HARDIRQS_NO__DO_IRQ 13 - def_bool y 14 - 15 12 # Select this to disable the deprecated stuff 16 13 config GENERIC_HARDIRQS_NO_DEPRECATED 17 14 def_bool n
-111
kernel/irq/handle.c
··· 118 118 119 119 return retval; 120 120 } 121 - 122 - #ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ 123 - 124 - #ifdef CONFIG_ENABLE_WARN_DEPRECATED 125 - # warning __do_IRQ is deprecated. Please convert to proper flow handlers 126 - #endif 127 - 128 - /** 129 - * __do_IRQ - original all in one highlevel IRQ handler 130 - * @irq: the interrupt number 131 - * 132 - * __do_IRQ handles all normal device IRQ's (the special 133 - * SMP cross-CPU interrupts have their own specific 134 - * handlers). 135 - * 136 - * This is the original x86 implementation which is used for every 137 - * interrupt type. 138 - */ 139 - unsigned int __do_IRQ(unsigned int irq) 140 - { 141 - struct irq_desc *desc = irq_to_desc(irq); 142 - struct irqaction *action; 143 - unsigned int status; 144 - 145 - kstat_incr_irqs_this_cpu(irq, desc); 146 - 147 - if (CHECK_IRQ_PER_CPU(desc->status)) { 148 - irqreturn_t action_ret; 149 - 150 - /* 151 - * No locking required for CPU-local interrupts: 152 - */ 153 - if (desc->irq_data.chip->ack) 154 - desc->irq_data.chip->ack(irq); 155 - if (likely(!(desc->status & IRQ_DISABLED))) { 156 - action_ret = handle_IRQ_event(irq, desc->action); 157 - if (!noirqdebug) 158 - note_interrupt(irq, desc, action_ret); 159 - } 160 - desc->irq_data.chip->end(irq); 161 - return 1; 162 - } 163 - 164 - raw_spin_lock(&desc->lock); 165 - if (desc->irq_data.chip->ack) 166 - desc->irq_data.chip->ack(irq); 167 - /* 168 - * REPLAY is when Linux resends an IRQ that was dropped earlier 169 - * WAITING is used by probe to mark irqs that are being tested 170 - */ 171 - status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING); 172 - status |= IRQ_PENDING; /* we _want_ to handle it */ 173 - 174 - /* 175 - * If the IRQ is disabled for whatever reason, we cannot 176 - * use the action we have. 177 - */ 178 - action = NULL; 179 - if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) { 180 - action = desc->action; 181 - status &= ~IRQ_PENDING; /* we commit to handling */ 182 - status |= IRQ_INPROGRESS; /* we are handling it */ 183 - } 184 - desc->status = status; 185 - 186 - /* 187 - * If there is no IRQ handler or it was disabled, exit early. 188 - * Since we set PENDING, if another processor is handling 189 - * a different instance of this same irq, the other processor 190 - * will take care of it. 191 - */ 192 - if (unlikely(!action)) 193 - goto out; 194 - 195 - /* 196 - * Edge triggered interrupts need to remember 197 - * pending events. 198 - * This applies to any hw interrupts that allow a second 199 - * instance of the same irq to arrive while we are in do_IRQ 200 - * or in the handler. But the code here only handles the _second_ 201 - * instance of the irq, not the third or fourth. So it is mostly 202 - * useful for irq hardware that does not mask cleanly in an 203 - * SMP environment. 204 - */ 205 - for (;;) { 206 - irqreturn_t action_ret; 207 - 208 - raw_spin_unlock(&desc->lock); 209 - 210 - action_ret = handle_IRQ_event(irq, action); 211 - if (!noirqdebug) 212 - note_interrupt(irq, desc, action_ret); 213 - 214 - raw_spin_lock(&desc->lock); 215 - if (likely(!(desc->status & IRQ_PENDING))) 216 - break; 217 - desc->status &= ~IRQ_PENDING; 218 - } 219 - desc->status &= ~IRQ_INPROGRESS; 220 - 221 - out: 222 - /* 223 - * The ->end() handler has to deal with interrupts which got 224 - * disabled while the handler was running. 225 - */ 226 - desc->irq_data.chip->end(irq); 227 - raw_spin_unlock(&desc->lock); 228 - 229 - return 1; 230 - } 231 - #endif