diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2011-01-19 13:41:35 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2011-01-21 05:55:31 -0500 |
| commit | 1c77ff22f539ceaa64ea43d6a26d867e84602cb7 (patch) | |
| tree | d1623ae6a2f8ed56acbaa03b514e393496c42802 | |
| parent | 0e155b2ce293382730b8473f6ceeb7ac9b939b7d (diff) | |
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>
| -rw-r--r-- | Documentation/feature-removal-schedule.txt | 8 | ||||
| -rw-r--r-- | arch/alpha/Kconfig | 3 | ||||
| -rw-r--r-- | arch/blackfin/Kconfig | 3 | ||||
| -rw-r--r-- | arch/frv/Kconfig | 4 | ||||
| -rw-r--r-- | arch/ia64/Kconfig | 3 | ||||
| -rw-r--r-- | arch/m68knommu/Kconfig | 4 | ||||
| -rw-r--r-- | arch/microblaze/Kconfig | 3 | ||||
| -rw-r--r-- | arch/mips/Kconfig | 3 | ||||
| -rw-r--r-- | arch/mn10300/Kconfig | 3 | ||||
| -rw-r--r-- | arch/parisc/Kconfig | 4 | ||||
| -rw-r--r-- | arch/powerpc/Kconfig | 4 | ||||
| -rw-r--r-- | arch/score/Kconfig | 3 | ||||
| -rw-r--r-- | arch/sparc/Kconfig | 4 | ||||
| -rw-r--r-- | arch/tile/Kconfig | 3 | ||||
| -rw-r--r-- | arch/um/Kconfig.um | 3 | ||||
| -rw-r--r-- | include/linux/irqdesc.h | 14 | ||||
| -rw-r--r-- | kernel/irq/Kconfig | 3 | ||||
| -rw-r--r-- | kernel/irq/handle.c | 111 |
18 files changed, 0 insertions, 183 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 8c594c45b6a1..b959659c5df4 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
| @@ -357,14 +357,6 @@ Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com> | |||
| 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 | What: fakephp and associated sysfs files in /sys/bus/pci/slots/ | 360 | What: fakephp and associated sysfs files in /sys/bus/pci/slots/ |
| 369 | When: 2011 | 361 | When: 2011 |
| 370 | Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to | 362 | Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to |
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index fc95ee1bcf6f..943fe6930f77 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
| @@ -68,9 +68,6 @@ config GENERIC_IOMAP | |||
| 68 | bool | 68 | bool |
| 69 | default n | 69 | default n |
| 70 | 70 | ||
| 71 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 72 | def_bool y | ||
| 73 | |||
| 74 | config GENERIC_HARDIRQS | 71 | config GENERIC_HARDIRQS |
| 75 | bool | 72 | bool |
| 76 | default y | 73 | default y |
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 0a221d48152d..a37b2be23f18 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
| @@ -50,9 +50,6 @@ config GENERIC_HARDIRQS | |||
| 50 | config GENERIC_IRQ_PROBE | 50 | config GENERIC_IRQ_PROBE |
| 51 | def_bool y | 51 | def_bool y |
| 52 | 52 | ||
| 53 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 54 | def_bool y | ||
| 55 | |||
| 56 | config GENERIC_GPIO | 53 | config GENERIC_GPIO |
| 57 | def_bool y | 54 | def_bool y |
| 58 | 55 | ||
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index f6bcb039cd6d..e504edeb3d84 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
| @@ -33,10 +33,6 @@ config GENERIC_HARDIRQS | |||
| 33 | bool | 33 | bool |
| 34 | default y | 34 | default y |
| 35 | 35 | ||
| 36 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 37 | bool | ||
| 38 | default y | ||
| 39 | |||
| 40 | config TIME_LOW_RES | 36 | config TIME_LOW_RES |
| 41 | bool | 37 | bool |
| 42 | default y | 38 | default y |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index e0f5b6d7f849..be1faf991813 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
| @@ -684,9 +684,6 @@ source "lib/Kconfig" | |||
| 684 | config GENERIC_HARDIRQS | 684 | config GENERIC_HARDIRQS |
| 685 | def_bool y | 685 | def_bool y |
| 686 | 686 | ||
| 687 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 688 | def_bool y | ||
| 689 | |||
| 690 | config GENERIC_IRQ_PROBE | 687 | config GENERIC_IRQ_PROBE |
| 691 | bool | 688 | bool |
| 692 | default y | 689 | default y |
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig index 704e7b92334c..7379cb0ce1af 100644 --- a/arch/m68knommu/Kconfig +++ b/arch/m68knommu/Kconfig | |||
| @@ -52,10 +52,6 @@ config GENERIC_HARDIRQS | |||
| 52 | bool | 52 | bool |
| 53 | default y | 53 | default y |
| 54 | 54 | ||
| 55 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 56 | bool | ||
| 57 | default y | ||
| 58 | |||
| 59 | config GENERIC_CALIBRATE_DELAY | 55 | config GENERIC_CALIBRATE_DELAY |
| 60 | bool | 56 | bool |
| 61 | default y | 57 | default y |
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 5f5018a71a3d..5a6378493797 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
| @@ -52,9 +52,6 @@ config GENERIC_TIME_VSYSCALL | |||
| 52 | config GENERIC_CLOCKEVENTS | 52 | config GENERIC_CLOCKEVENTS |
| 53 | def_bool y | 53 | def_bool y |
| 54 | 54 | ||
| 55 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 56 | def_bool y | ||
| 57 | |||
| 58 | config GENERIC_GPIO | 55 | config GENERIC_GPIO |
| 59 | def_bool y | 56 | def_bool y |
| 60 | 57 | ||
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 548e6cc3bc28..f5ecc0566bc2 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -793,9 +793,6 @@ config SCHED_OMIT_FRAME_POINTER | |||
| 793 | bool | 793 | bool |
| 794 | default y | 794 | default y |
| 795 | 795 | ||
| 796 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 797 | def_bool y | ||
| 798 | |||
| 799 | # | 796 | # |
| 800 | # Select some configuration options automatically based on user selections. | 797 | # Select some configuration options automatically based on user selections. |
| 801 | # | 798 | # |
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 8ed41cf2b08d..4638269152f6 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig | |||
| @@ -34,9 +34,6 @@ config RWSEM_GENERIC_SPINLOCK | |||
| 34 | config RWSEM_XCHGADD_ALGORITHM | 34 | config RWSEM_XCHGADD_ALGORITHM |
| 35 | bool | 35 | bool |
| 36 | 36 | ||
| 37 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 38 | def_bool y | ||
| 39 | |||
| 40 | config GENERIC_CALIBRATE_DELAY | 37 | config GENERIC_CALIBRATE_DELAY |
| 41 | def_bool y | 38 | def_bool y |
| 42 | 39 | ||
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 0888675c98dd..4b94ac4dc603 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
| @@ -12,7 +12,6 @@ config PARISC | |||
| 12 | select HAVE_IRQ_WORK | 12 | select HAVE_IRQ_WORK |
| 13 | select HAVE_PERF_EVENTS | 13 | select HAVE_PERF_EVENTS |
| 14 | select GENERIC_ATOMIC64 if !64BIT | 14 | select GENERIC_ATOMIC64 if !64BIT |
| 15 | select GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 16 | help | 15 | help |
| 17 | The PA-RISC microprocessor is designed by Hewlett-Packard and used | 16 | The PA-RISC microprocessor is designed by Hewlett-Packard and used |
| 18 | in many of their workstations & servers (HP9000 700 and 800 series, | 17 | in many of their workstations & servers (HP9000 700 and 800 series, |
| @@ -79,9 +78,6 @@ config IRQ_PER_CPU | |||
| 79 | bool | 78 | bool |
| 80 | default y | 79 | default y |
| 81 | 80 | ||
| 82 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 83 | def_bool y | ||
| 84 | |||
| 85 | # unless you want to implement ACPI on PA-RISC ... ;-) | 81 | # unless you want to implement ACPI on PA-RISC ... ;-) |
| 86 | config PM | 82 | config PM |
| 87 | bool | 83 | bool |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 959f38ccb9a7..e0b185dd718a 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -40,10 +40,6 @@ config GENERIC_HARDIRQS | |||
| 40 | bool | 40 | bool |
| 41 | default y | 41 | default y |
| 42 | 42 | ||
| 43 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 44 | bool | ||
| 45 | default y | ||
| 46 | |||
| 47 | config HAVE_SETUP_PER_CPU_AREA | 43 | config HAVE_SETUP_PER_CPU_AREA |
| 48 | def_bool PPC64 | 44 | def_bool PPC64 |
| 49 | 45 | ||
diff --git a/arch/score/Kconfig b/arch/score/Kconfig index 4293fdcb5398..4f159acfbe33 100644 --- a/arch/score/Kconfig +++ b/arch/score/Kconfig | |||
| @@ -53,9 +53,6 @@ config GENERIC_CLOCKEVENTS | |||
| 53 | config SCHED_NO_NO_OMIT_FRAME_POINTER | 53 | config SCHED_NO_NO_OMIT_FRAME_POINTER |
| 54 | def_bool y | 54 | def_bool y |
| 55 | 55 | ||
| 56 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 57 | def_bool y | ||
| 58 | |||
| 59 | config GENERIC_SYSCALL_TABLE | 56 | config GENERIC_SYSCALL_TABLE |
| 60 | def_bool y | 57 | def_bool y |
| 61 | 58 | ||
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 45d9c87d083a..989bb6415ea3 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
| @@ -107,10 +107,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK | |||
| 107 | config NEED_PER_CPU_PAGE_FIRST_CHUNK | 107 | config NEED_PER_CPU_PAGE_FIRST_CHUNK |
| 108 | def_bool y if SPARC64 | 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 | config MMU | 110 | config MMU |
| 115 | bool | 111 | bool |
| 116 | default y | 112 | default y |
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index 4e8b82bca9e5..c16b98c2435d 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig | |||
| @@ -10,9 +10,6 @@ config GENERIC_CSUM | |||
| 10 | config GENERIC_HARDIRQS | 10 | config GENERIC_HARDIRQS |
| 11 | def_bool y | 11 | def_bool y |
| 12 | 12 | ||
| 13 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 14 | def_bool y | ||
| 15 | |||
| 16 | config GENERIC_IRQ_PROBE | 13 | config GENERIC_IRQ_PROBE |
| 17 | def_bool y | 14 | def_bool y |
| 18 | 15 | ||
diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um index f8d1d0d47fe6..90a438acbfaf 100644 --- a/arch/um/Kconfig.um +++ b/arch/um/Kconfig.um | |||
| @@ -120,9 +120,6 @@ config SMP | |||
| 120 | 120 | ||
| 121 | If you don't know what to do, say N. | 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 | config NR_CPUS | 123 | config NR_CPUS |
| 127 | int "Maximum number of CPUs (2-32)" | 124 | int "Maximum number of CPUs (2-32)" |
| 128 | range 2 32 | 125 | range 2 32 |
diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h index 6a64c6fa81af..c1a95b7b58de 100644 --- a/include/linux/irqdesc.h +++ b/include/linux/irqdesc.h | |||
| @@ -101,13 +101,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) | |||
| 101 | #define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc) | 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 | * Architectures call this to let the generic IRQ layer | 104 | * Architectures call this to let the generic IRQ layer |
| 112 | * handle an interrupt. If the descriptor is attached to an | 105 | * handle an interrupt. If the descriptor is attached to an |
| 113 | * irqchip-style controller then we call the ->handle_irq() handler, | 106 | * irqchip-style controller then we call the ->handle_irq() handler, |
| @@ -115,14 +108,7 @@ extern unsigned int __do_IRQ(unsigned int irq); | |||
| 115 | */ | 108 | */ |
| 116 | static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc) | 109 | static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc) |
| 117 | { | 110 | { |
| 118 | #ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 119 | desc->handle_irq(irq, desc); | 111 | desc->handle_irq(irq, desc); |
| 120 | #else | ||
| 121 | if (likely(desc->handle_irq)) | ||
| 122 | desc->handle_irq(irq, desc); | ||
| 123 | else | ||
| 124 | __do_IRQ(irq); | ||
| 125 | #endif | ||
| 126 | } | 112 | } |
| 127 | 113 | ||
| 128 | static inline void generic_handle_irq(unsigned int irq) | 114 | static inline void generic_handle_irq(unsigned int irq) |
diff --git a/kernel/irq/Kconfig b/kernel/irq/Kconfig index 31d766bf5d2e..8e42fec7686d 100644 --- a/kernel/irq/Kconfig +++ b/kernel/irq/Kconfig | |||
| @@ -9,9 +9,6 @@ menu "IRQ subsystem" | |||
| 9 | config GENERIC_HARDIRQS | 9 | config GENERIC_HARDIRQS |
| 10 | def_bool y | 10 | def_bool y |
| 11 | 11 | ||
| 12 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
| 13 | def_bool y | ||
| 14 | |||
| 15 | # Select this to disable the deprecated stuff | 12 | # Select this to disable the deprecated stuff |
| 16 | config GENERIC_HARDIRQS_NO_DEPRECATED | 13 | config GENERIC_HARDIRQS_NO_DEPRECATED |
| 17 | def_bool n | 14 | def_bool n |
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index e2347eb63306..3540a7190122 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
| @@ -118,114 +118,3 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) | |||
| 118 | 118 | ||
| 119 | return retval; | 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 | ||
