Merge branch 'drm-patches' of master.kernel.org:/pub/scm/linux/kernel/git/airlied...
[linux-drm-fsl-dcu.git] / arch / alpha / kernel / sys_noritake.c
index 55db02d318d74172804f5ee67ae1ebd25e046b7d..eb2a1d63f484e6ff4ff283bd2152493fa87d2d40 100644 (file)
@@ -9,7 +9,6 @@
  * CORELLE (AlphaServer 800), and ALCOR Primo (AlphaStation 600A).
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/mm.h>
@@ -67,6 +66,13 @@ noritake_startup_irq(unsigned int irq)
        return 0;
 }
 
+static void
+noritake_end_irq(unsigned int irq)
+{
+        if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
+                noritake_enable_irq(irq);
+}
+
 static struct hw_interrupt_type noritake_irq_type = {
        .typename       = "NORITAKE",
        .startup        = noritake_startup_irq,
@@ -74,11 +80,11 @@ static struct hw_interrupt_type noritake_irq_type = {
        .enable         = noritake_enable_irq,
        .disable        = noritake_disable_irq,
        .ack            = noritake_disable_irq,
-       .end            = noritake_enable_irq,
+       .end            = noritake_end_irq,
 };
 
 static void 
-noritake_device_interrupt(unsigned long vector, struct pt_regs *regs)
+noritake_device_interrupt(unsigned long vector)
 {
        unsigned long pld;
        unsigned int i;
@@ -97,15 +103,15 @@ noritake_device_interrupt(unsigned long vector, struct pt_regs *regs)
                i = ffz(~pld);
                pld &= pld - 1; /* clear least bit set */
                if (i < 16) {
-                       isa_device_interrupt(vector, regs);
+                       isa_device_interrupt(vector);
                } else {
-                       handle_irq(i, regs);
+                       handle_irq(i);
                }
        }
 }
 
 static void 
-noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
+noritake_srm_device_interrupt(unsigned long vector)
 {
        int irq;
 
@@ -123,7 +129,7 @@ noritake_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
        if (irq >= 16)
                irq = irq + 1;
 
-       handle_irq(irq, regs);
+       handle_irq(irq);
 }
 
 static void __init
@@ -265,8 +271,7 @@ noritake_swizzle(struct pci_dev *dev, u8 *pinp)
 
 #if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_PRIMO)
 static void
-noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr,
-                            struct pt_regs * regs)
+noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr)
 {
 #define MCHK_NO_DEVSEL 0x205U
 #define MCHK_NO_TABT 0x204U
@@ -285,7 +290,7 @@ noritake_apecs_machine_check(unsigned long vector, unsigned long la_ptr,
         mb();
 
         code = mchk_header->code;
-        process_mcheck_info(vector, la_ptr, regs, "NORITAKE APECS",
+        process_mcheck_info(vector, la_ptr, "NORITAKE APECS",
                             (mcheck_expected(0)
                              && (code == MCHK_NO_DEVSEL
                                  || code == MCHK_NO_TABT)));