backported vs2.1.x fix to irq handling, which caused incorrect scheduler behavior
[linux-2.6.git] / kernel / irq / handle.c
index 553a098..a4c8f4d 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/random.h>
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 
 #include "internals.h"
@@ -171,7 +172,6 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
 {
        struct irq_desc *desc = irq_desc + irq;
        struct irqaction *action;
-       struct vx_info_save vxis;
        unsigned int status;
 
        kstat_this_cpu.irqs[irq]++;
@@ -181,17 +181,14 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
                /*
                 * No locking required for CPU-local interrupts:
                 */
-               __enter_vx_admin(&vxis);
                if (desc->chip->ack)
                        desc->chip->ack(irq);
                action_ret = handle_IRQ_event(irq, regs, desc->action);
                desc->chip->end(irq);
-               __leave_vx_admin(&vxis);
                return 1;
        }
 
        spin_lock(&desc->lock);
-       __enter_vx_admin(&vxis);
        if (desc->chip->ack)
                desc->chip->ack(irq);
        /*
@@ -254,7 +251,6 @@ out:
         * disabled while the handler was running.
         */
        desc->chip->end(irq);
-       __leave_vx_admin(&vxis);
        spin_unlock(&desc->lock);
 
        return 1;