#include <linux/irq.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
+#include <linux/kallsyms.h>
#include <asm/atomic.h>
#include <asm/io.h>
* waste of time and is not what some drivers would
* prefer.
*/
-int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
+int handle_IRQ_event(unsigned int irq,
+ struct pt_regs *regs, struct irqaction *action)
{
int status = 1; /* Force the "do bottom halves" bit */
int retval = 0;
+ struct irqaction *first_action = action;
if (!(action->flags & SA_INTERRUPT))
local_irq_enable();
static int count = 100;
if (count) {
count--;
- printk(retval
- ? "irq event %d: bogus retval mask %x\n"
- : "irq %d: nobody cared!\n",
- irq,
- retval);
+ if (retval) {
+ printk("irq event %d: bogus retval mask %x\n",
+ irq, retval);
+ } else {
+ printk("irq %d: nobody cared!\n", irq);
+ }
dump_stack();
+ printk("handlers:\n");
+ action = first_action;
+ do {
+ printk("[<%p>]", action->handler);
+ print_symbol(" (%s)",
+ (unsigned long)action->handler);
+ printk("\n");
+ action = action->next;
+ } while (action);
}
}