]> err.no Git - linux-2.6/blobdiff - include/linux/irq.h
Merge branch 'intelfb-patches' of master.kernel.org:/pub/scm/linux/kernel/git/airlied...
[linux-2.6] / include / linux / irq.h
index 6e59ac05ef2af46d9a285bb57d5f8a8b81ff3c97..48d3cb3b6a4737d380bdbe21e8be467284640bd1 100644 (file)
@@ -47,8 +47,8 @@
 #define IRQ_WAITING            0x00200000      /* IRQ not yet seen - for autodetection */
 #define IRQ_LEVEL              0x00400000      /* IRQ level triggered */
 #define IRQ_MASKED             0x00800000      /* IRQ masked - shouldn't be seen again */
+#define IRQ_PER_CPU            0x01000000      /* IRQ is per CPU */
 #ifdef CONFIG_IRQ_PER_CPU
-# define IRQ_PER_CPU           0x01000000      /* IRQ is per CPU */
 # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
 #else
 # define CHECK_IRQ_PER_CPU(var) 0
@@ -320,7 +320,9 @@ handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *,
  * Monolithic do_IRQ implementation.
  * (is an explicit fastcall, because i386 4KSTACKS calls it from assembly)
  */
+#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
 extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
+#endif
 
 /*
  * Architectures call this to let the generic IRQ layer
@@ -332,10 +334,14 @@ static inline void generic_handle_irq(unsigned int irq, struct pt_regs *regs)
 {
        struct irq_desc *desc = irq_desc + irq;
 
+#ifdef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ
+       desc->handle_irq(irq, desc, regs);
+#else
        if (likely(desc->handle_irq))
                desc->handle_irq(irq, desc, regs);
        else
                __do_IRQ(irq, regs);
+#endif
 }
 
 /* Handling of unhandled and spurious interrupts: */