Commit 1c77ff22 authored by Thomas Gleixner's avatar Thomas Gleixner

genirq: Remove __do_IRQ

All architectures are finally converted. Remove the cruft.
Signed-off-by: default avatarThomas 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: default avatarDavid Howells <dhowells@redhat.com>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Acked-by: default avatarBenjamin 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>
parent 0e155b2c
...@@ -357,14 +357,6 @@ Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com> ...@@ -357,14 +357,6 @@ Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com>
----------------------------- -----------------------------
What: __do_IRQ all in one fits nothing interrupt handler
When: 2.6.32
Why: __do_IRQ was kept for easy migration to the type flow handlers.
More than two years of migration time is enough.
Who: Thomas Gleixner <tglx@linutronix.de>
-----------------------------
What: fakephp and associated sysfs files in /sys/bus/pci/slots/ What: fakephp and associated sysfs files in /sys/bus/pci/slots/
When: 2011 When: 2011
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
......
...@@ -68,9 +68,6 @@ config GENERIC_IOMAP ...@@ -68,9 +68,6 @@ config GENERIC_IOMAP
bool bool
default n default n
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_HARDIRQS config GENERIC_HARDIRQS
bool bool
default y default y
......
...@@ -50,9 +50,6 @@ config GENERIC_HARDIRQS ...@@ -50,9 +50,6 @@ config GENERIC_HARDIRQS
config GENERIC_IRQ_PROBE config GENERIC_IRQ_PROBE
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_GPIO config GENERIC_GPIO
def_bool y def_bool y
......
...@@ -33,10 +33,6 @@ config GENERIC_HARDIRQS ...@@ -33,10 +33,6 @@ config GENERIC_HARDIRQS
bool bool
default y default y
config GENERIC_HARDIRQS_NO__DO_IRQ
bool
default y
config TIME_LOW_RES config TIME_LOW_RES
bool bool
default y default y
......
...@@ -684,9 +684,6 @@ source "lib/Kconfig" ...@@ -684,9 +684,6 @@ source "lib/Kconfig"
config GENERIC_HARDIRQS config GENERIC_HARDIRQS
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_IRQ_PROBE config GENERIC_IRQ_PROBE
bool bool
default y default y
......
...@@ -52,10 +52,6 @@ config GENERIC_HARDIRQS ...@@ -52,10 +52,6 @@ config GENERIC_HARDIRQS
bool bool
default y default y
config GENERIC_HARDIRQS_NO__DO_IRQ
bool
default y
config GENERIC_CALIBRATE_DELAY config GENERIC_CALIBRATE_DELAY
bool bool
default y default y
......
...@@ -52,9 +52,6 @@ config GENERIC_TIME_VSYSCALL ...@@ -52,9 +52,6 @@ config GENERIC_TIME_VSYSCALL
config GENERIC_CLOCKEVENTS config GENERIC_CLOCKEVENTS
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_GPIO config GENERIC_GPIO
def_bool y def_bool y
......
...@@ -793,9 +793,6 @@ config SCHED_OMIT_FRAME_POINTER ...@@ -793,9 +793,6 @@ config SCHED_OMIT_FRAME_POINTER
bool bool
default y default y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
# #
# Select some configuration options automatically based on user selections. # Select some configuration options automatically based on user selections.
# #
......
...@@ -34,9 +34,6 @@ config RWSEM_GENERIC_SPINLOCK ...@@ -34,9 +34,6 @@ config RWSEM_GENERIC_SPINLOCK
config RWSEM_XCHGADD_ALGORITHM config RWSEM_XCHGADD_ALGORITHM
bool bool
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_CALIBRATE_DELAY config GENERIC_CALIBRATE_DELAY
def_bool y def_bool y
......
...@@ -12,7 +12,6 @@ config PARISC ...@@ -12,7 +12,6 @@ config PARISC
select HAVE_IRQ_WORK select HAVE_IRQ_WORK
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select GENERIC_ATOMIC64 if !64BIT select GENERIC_ATOMIC64 if !64BIT
select GENERIC_HARDIRQS_NO__DO_IRQ
help help
The PA-RISC microprocessor is designed by Hewlett-Packard and used The PA-RISC microprocessor is designed by Hewlett-Packard and used
in many of their workstations & servers (HP9000 700 and 800 series, in many of their workstations & servers (HP9000 700 and 800 series,
...@@ -79,9 +78,6 @@ config IRQ_PER_CPU ...@@ -79,9 +78,6 @@ config IRQ_PER_CPU
bool bool
default y default y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
# unless you want to implement ACPI on PA-RISC ... ;-) # unless you want to implement ACPI on PA-RISC ... ;-)
config PM config PM
bool bool
......
...@@ -40,10 +40,6 @@ config GENERIC_HARDIRQS ...@@ -40,10 +40,6 @@ config GENERIC_HARDIRQS
bool bool
default y default y
config GENERIC_HARDIRQS_NO__DO_IRQ
bool
default y
config HAVE_SETUP_PER_CPU_AREA config HAVE_SETUP_PER_CPU_AREA
def_bool PPC64 def_bool PPC64
......
...@@ -53,9 +53,6 @@ config GENERIC_CLOCKEVENTS ...@@ -53,9 +53,6 @@ config GENERIC_CLOCKEVENTS
config SCHED_NO_NO_OMIT_FRAME_POINTER config SCHED_NO_NO_OMIT_FRAME_POINTER
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_SYSCALL_TABLE config GENERIC_SYSCALL_TABLE
def_bool y def_bool y
......
...@@ -107,10 +107,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK ...@@ -107,10 +107,6 @@ config NEED_PER_CPU_EMBED_FIRST_CHUNK
config NEED_PER_CPU_PAGE_FIRST_CHUNK config NEED_PER_CPU_PAGE_FIRST_CHUNK
def_bool y if SPARC64 def_bool y if SPARC64
config GENERIC_HARDIRQS_NO__DO_IRQ
bool
def_bool y if SPARC64
config MMU config MMU
bool bool
default y default y
......
...@@ -10,9 +10,6 @@ config GENERIC_CSUM ...@@ -10,9 +10,6 @@ config GENERIC_CSUM
config GENERIC_HARDIRQS config GENERIC_HARDIRQS
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config GENERIC_IRQ_PROBE config GENERIC_IRQ_PROBE
def_bool y def_bool y
......
...@@ -120,9 +120,6 @@ config SMP ...@@ -120,9 +120,6 @@ config SMP
If you don't know what to do, say N. If you don't know what to do, say N.
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
config NR_CPUS config NR_CPUS
int "Maximum number of CPUs (2-32)" int "Maximum number of CPUs (2-32)"
range 2 32 range 2 32
......
...@@ -100,13 +100,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) ...@@ -100,13 +100,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node)
#define get_irq_desc_data(desc) ((desc)->irq_data.handler_data) #define get_irq_desc_data(desc) ((desc)->irq_data.handler_data)
#define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc) #define get_irq_desc_msi(desc) ((desc)->irq_data.msi_desc)
/*
* Monolithic do_IRQ implementation.
*/
#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
extern unsigned int __do_IRQ(unsigned int irq);
#endif
/* /*
* Architectures call this to let the generic IRQ layer * Architectures call this to let the generic IRQ layer
* handle an interrupt. If the descriptor is attached to an * handle an interrupt. If the descriptor is attached to an
...@@ -115,14 +108,7 @@ extern unsigned int __do_IRQ(unsigned int irq); ...@@ -115,14 +108,7 @@ extern unsigned int __do_IRQ(unsigned int irq);
*/ */
static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc) static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *desc)
{ {
#ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
desc->handle_irq(irq, desc); desc->handle_irq(irq, desc);
#else
if (likely(desc->handle_irq))
desc->handle_irq(irq, desc);
else
__do_IRQ(irq);
#endif
} }
static inline void generic_handle_irq(unsigned int irq) static inline void generic_handle_irq(unsigned int irq)
......
...@@ -9,9 +9,6 @@ menu "IRQ subsystem" ...@@ -9,9 +9,6 @@ menu "IRQ subsystem"
config GENERIC_HARDIRQS config GENERIC_HARDIRQS
def_bool y def_bool y
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
# Select this to disable the deprecated stuff # Select this to disable the deprecated stuff
config GENERIC_HARDIRQS_NO_DEPRECATED config GENERIC_HARDIRQS_NO_DEPRECATED
def_bool n def_bool n
......
...@@ -118,114 +118,3 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) ...@@ -118,114 +118,3 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
return retval; return retval;
} }
#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
#ifdef CONFIG_ENABLE_WARN_DEPRECATED
# warning __do_IRQ is deprecated. Please convert to proper flow handlers
#endif
/**
* __do_IRQ - original all in one highlevel IRQ handler
* @irq: the interrupt number
*
* __do_IRQ handles all normal device IRQ's (the special
* SMP cross-CPU interrupts have their own specific
* handlers).
*
* This is the original x86 implementation which is used for every
* interrupt type.
*/
unsigned int __do_IRQ(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
struct irqaction *action;
unsigned int status;
kstat_incr_irqs_this_cpu(irq, desc);
if (CHECK_IRQ_PER_CPU(desc->status)) {
irqreturn_t action_ret;
/*
* No locking required for CPU-local interrupts:
*/
if (desc->irq_data.chip->ack)
desc->irq_data.chip->ack(irq);
if (likely(!(desc->status & IRQ_DISABLED))) {
action_ret = handle_IRQ_event(irq, desc->action);
if (!noirqdebug)
note_interrupt(irq, desc, action_ret);
}
desc->irq_data.chip->end(irq);
return 1;
}
raw_spin_lock(&desc->lock);
if (desc->irq_data.chip->ack)
desc->irq_data.chip->ack(irq);
/*
* REPLAY is when Linux resends an IRQ that was dropped earlier
* WAITING is used by probe to mark irqs that are being tested
*/
status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
status |= IRQ_PENDING; /* we _want_ to handle it */
/*
* If the IRQ is disabled for whatever reason, we cannot
* use the action we have.
*/
action = NULL;
if (likely(!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))) {
action = desc->action;
status &= ~IRQ_PENDING; /* we commit to handling */
status |= IRQ_INPROGRESS; /* we are handling it */
}
desc->status = status;
/*
* If there is no IRQ handler or it was disabled, exit early.
* Since we set PENDING, if another processor is handling
* a different instance of this same irq, the other processor
* will take care of it.
*/
if (unlikely(!action))
goto out;
/*
* Edge triggered interrupts need to remember
* pending events.
* This applies to any hw interrupts that allow a second
* instance of the same irq to arrive while we are in do_IRQ
* or in the handler. But the code here only handles the _second_
* instance of the irq, not the third or fourth. So it is mostly
* useful for irq hardware that does not mask cleanly in an
* SMP environment.
*/
for (;;) {
irqreturn_t action_ret;
raw_spin_unlock(&desc->lock);
action_ret = handle_IRQ_event(irq, action);
if (!noirqdebug)
note_interrupt(irq, desc, action_ret);
raw_spin_lock(&desc->lock);
if (likely(!(desc->status & IRQ_PENDING)))
break;
desc->status &= ~IRQ_PENDING;
}
desc->status &= ~IRQ_INPROGRESS;
out:
/*
* The ->end() handler has to deal with interrupts which got
* disabled while the handler was running.
*/
desc->irq_data.chip->end(irq);
raw_spin_unlock(&desc->lock);
return 1;
}
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment