backported vs2.1.x fix to irq handling, which caused incorrect scheduler behavior
authorMarc Fiuczynski <mef@cs.princeton.edu>
Tue, 28 Nov 2006 17:22:10 +0000 (17:22 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Tue, 28 Nov 2006 17:22:10 +0000 (17:22 +0000)
95 files changed:
arch/arm/kernel/irq.c
arch/arm26/kernel/irq.c
arch/frv/kernel/irq.c
arch/h8300/kernel/ints.c
arch/h8300/platform/h8s/ints.c
arch/i386/kernel/irq-xen.c
arch/i386/kernel/irq.c
arch/i386/kernel/sys_i386.c
arch/i386/kernel/sysenter.c
arch/powerpc/kernel/irq.c
arch/s390/kernel/s390_ext.c
arch/sparc/kernel/irq.c
arch/sparc/kernel/sun4d_irq.c
arch/x86_64/kernel/irq-xen.c
drivers/block/loop.c
drivers/char/tty_io.c
drivers/s390/cio/cio.c
fs/attr.c
fs/binfmt_aout.c
fs/binfmt_elf.c
fs/binfmt_elf_fdpic.c
fs/binfmt_flat.c
fs/binfmt_som.c
fs/devpts/inode.c
fs/exec.c
fs/ext2/balloc.c
fs/ext3/balloc.c
fs/fcntl.c
fs/file_table.c
fs/ioprio.c
fs/lockd/clntproc.c
fs/locks.c
fs/namei.c
fs/namespace.c
fs/nfs/nfsroot.c
fs/open.c
fs/proc/array.c
fs/proc/base.c
fs/proc/internal.h
fs/proc/proc_misc.c
fs/quota.c
fs/super.c
include/asm-generic/tlb.h
include/linux/sched.h
include/linux/vs_base.h
include/net/af_unix.h
include/net/route.h
ipc/mqueue.c
ipc/msg.c
ipc/sem.c
ipc/shm.c
ipc/util.c
kernel/capability.c
kernel/exit.c
kernel/fork.c
kernel/irq/handle.c
kernel/pid.c
kernel/posix-timers.c
kernel/printk.c
kernel/ptrace.c
kernel/sched.c
kernel/signal.c
kernel/softirq.c
kernel/sys.c
kernel/timer.c
kernel/vserver/context.c
kernel/vserver/cvirt.c
kernel/vserver/dlimit.c
kernel/vserver/helper.c
kernel/vserver/inode.c
kernel/vserver/legacy.c
kernel/vserver/legacynet.c
kernel/vserver/limit.c
kernel/vserver/namespace.c
kernel/vserver/network.c
kernel/vserver/proc.c
kernel/vserver/sched.c
kernel/vserver/signal.c
kernel/vserver/switch.c
mm/filemap_xip.c
mm/fremap.c
mm/hugetlb.c
mm/memory.c
mm/mlock.c
mm/mmap.c
mm/mremap.c
mm/nommu.c
mm/page_alloc.c
mm/rmap.c
mm/swapfile.c
net/core/dev.c
net/netlink/af_netlink.c
net/sunrpc/auth.c
net/sunrpc/auth_unix.c
security/commoncap.c

index 4b9757f..f54a69d 100644 (file)
@@ -37,7 +37,6 @@
 #include <linux/list.h>
 #include <linux/kallsyms.h>
 #include <linux/proc_fs.h>
-#include <linux/vs_context.h>
 
 #include <asm/system.h>
 #include <asm/mach/time.h>
@@ -113,7 +112,6 @@ static struct irq_desc bad_irq_desc = {
 asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
 {
        struct irqdesc *desc = irq_desc + irq;
-       struct vx_info_save vxis;
 
        /*
         * Some hardware gives randomly wrong interrupts.  Rather
@@ -123,12 +121,10 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
                desc = &bad_irq_desc;
 
        irq_enter();
-       __enter_vx_admin(&vxis);
        desc_handle_irq(irq, desc, regs);
 
        /* AT91 specific workaround */
        irq_finish(irq);
-       __leave_vx_admin(&vxis);
        irq_exit();
 }
 
index 6f5272e..d87d68b 100644 (file)
@@ -31,7 +31,6 @@
 #include <linux/init.h>
 #include <linux/seq_file.h>
 #include <linux/errno.h>
-#include <linux/vs_context.h>
 
 #include <asm/irq.h>
 #include <asm/system.h>
@@ -332,7 +331,6 @@ do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
 asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
 {
        struct irqdesc *desc = irq_desc + irq;
-       struct vx_info_save vxis;
 
        /*
         * Some hardware gives randomly wrong interrupts.  Rather
@@ -343,9 +341,7 @@ asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
 
        irq_enter();
        spin_lock(&irq_controller_lock);
-       __enter_vx_admin(&vxis);
        desc->handle(irq, desc, regs);
-       __leave_vx_admin(&vxis);
        spin_unlock(&irq_controller_lock);
        irq_exit();
 }
index 1c2a72c..0896701 100644 (file)
@@ -32,7 +32,6 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/module.h>
-#include <linux/vs_context.h>
 
 #include <asm/atomic.h>
 #include <asm/io.h>
@@ -283,7 +282,6 @@ EXPORT_SYMBOL(enable_irq);
 asmlinkage void do_IRQ(void)
 {
        struct irq_source *source;
-       struct vx_info_save vxis;
        int level, cpu;
 
        irq_enter();
@@ -300,10 +298,8 @@ asmlinkage void do_IRQ(void)
 
        kstat_this_cpu.irqs[level]++;
 
-       __enter_vx_admin(&vxis);
        for (source = frv_irq_levels[level].sources; source; source = source->next)
                source->doirq(source);
-       __leave_vx_admin(&vxis);
 
        __clr_MASK(level);
 
index 2984a28..1488b6a 100644 (file)
@@ -23,7 +23,6 @@
 #include <linux/random.h>
 #include <linux/bootmem.h>
 #include <linux/hardirq.h>
-#include <linux/vs_context.h>
 
 #include <asm/system.h>
 #include <asm/irq.h>
@@ -217,10 +216,7 @@ void disable_irq(unsigned int irq)
 
 asmlinkage void process_int(int irq, struct pt_regs *fp)
 {
-       struct vx_info_save vxis;
-
        irq_enter();
-       __enter_vx_admin(&vxis);
        h8300_clear_isr(irq);
        if (irq >= NR_TRAPS && irq < NR_IRQS) {
                if (irq_list[irq]) {
@@ -232,7 +228,6 @@ asmlinkage void process_int(int irq, struct pt_regs *fp)
        } else {
                BUG();
        }
-       __leave_vx_admin(&vxis);
        irq_exit();
 }
 
index f103efa..270440d 100644 (file)
@@ -23,7 +23,6 @@
 #include <linux/bootmem.h>
 #include <linux/random.h>
 #include <linux/hardirq.h>
-#include <linux/vs_context.h>
 
 #include <asm/system.h>
 #include <asm/irq.h>
@@ -262,12 +261,9 @@ void disable_irq(unsigned int irq)
 
 asmlinkage void process_int(unsigned long vec, struct pt_regs *fp)
 {
-       struct vx_info_save vxis;
-
        irq_enter();
        /* ISR clear       */
        /* compatible i386 */
-       __enter_vx_admin(&vxis);
        if (vec >= EXT_IRQ0 && vec <= EXT_IRQ15)
                *(volatile unsigned short *)ISR &= ~(1 << (vec - EXT_IRQ0));
        if (vec < NR_IRQS) {
@@ -280,7 +276,6 @@ asmlinkage void process_int(unsigned long vec, struct pt_regs *fp)
        } else {
                BUG();
        }
-       __leave_vx_admin(&vxis);
        irq_exit();
 }
 
index b4a38e4..280c8fb 100644 (file)
@@ -42,8 +42,8 @@ union irq_ctx {
        u32                     stack[THREAD_SIZE/sizeof(u32)];
 };
 
-static union irq_ctx *hardirq_ctx[NR_CPUS];
-static union irq_ctx *softirq_ctx[NR_CPUS];
+static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly;
+static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly;
 #endif
 
 /*
@@ -60,6 +60,12 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
        u32 *isp;
 #endif
 
+       if (unlikely((unsigned)irq >= NR_IRQS)) {
+               printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
+                                       __FUNCTION__, irq);
+               BUG();
+       }
+
        irq_enter();
 #ifdef CONFIG_DEBUG_STACKOVERFLOW
        /* Debugging check for stack overflow: is there less than 1KB free? */
@@ -75,7 +81,6 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
                }
        }
 #endif
-
 #ifdef CONFIG_4KSTACKS
 
        curctx = (union irq_ctx *) current_thread_info();
@@ -95,6 +100,14 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
                irqctx->tinfo.task = curctx->tinfo.task;
                irqctx->tinfo.previous_esp = current_stack_pointer;
 
+               /*
+                * Copy the softirq bits in preempt_count so that the
+                * softirq checks work in the hardirq context.
+                */
+               irqctx->tinfo.preempt_count =
+                       (irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK) |
+                        (curctx->tinfo.preempt_count & SOFTIRQ_MASK);
+
                asm volatile(
                        "       xchgl   %%ebx,%%esp      \n"
                        "       call    __do_IRQ         \n"
@@ -147,7 +160,7 @@ void irq_ctx_init(int cpu)
        irqctx->tinfo.task              = NULL;
        irqctx->tinfo.exec_domain       = NULL;
        irqctx->tinfo.cpu               = cpu;
-       irqctx->tinfo.preempt_count     = SOFTIRQ_OFFSET;
+       irqctx->tinfo.preempt_count     = 0;
        irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 
        softirq_ctx[cpu] = irqctx;
@@ -192,6 +205,10 @@ asmlinkage void do_softirq(void)
                        : "0"(isp)
                        : "memory", "cc", "edx", "ecx", "eax"
                );
+               /*
+                * Shouldnt happen, we returned above if in_interrupt():
+                */
+               WARN_ON_ONCE(softirq_count());
        }
 
        local_irq_restore(flags);
@@ -219,7 +236,7 @@ int show_interrupts(struct seq_file *p, void *v)
        if (i == 0) {
                seq_printf(p, "           ");
                for_each_online_cpu(j)
-                       seq_printf(p, "CPU%d       ",j);
+                       seq_printf(p, "CPU%-8d       ",j);
                seq_putc(p, '\n');
        }
 
@@ -235,7 +252,7 @@ int show_interrupts(struct seq_file *p, void *v)
                for_each_online_cpu(j)
                        seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
 #endif
-               seq_printf(p, " %14s", irq_desc[i].handler->typename);
+               seq_printf(p, " %14s", irq_desc[i].chip->typename);
                seq_printf(p, "  %s", action->name);
 
                for (action=action->next; action; action = action->next)
@@ -276,13 +293,13 @@ void fixup_irqs(cpumask_t map)
                if (irq == 2)
                        continue;
 
-               cpus_and(mask, irq_affinity[irq], map);
+               cpus_and(mask, irq_desc[irq].affinity, map);
                if (any_online_cpu(mask) == NR_CPUS) {
                        /*printk("Breaking affinity for irq %i\n", irq);*/
                        mask = map;
                }
-               if (irq_desc[irq].handler->set_affinity)
-                       irq_desc[irq].handler->set_affinity(irq, mask);
+               if (irq_desc[irq].chip->set_affinity)
+                       irq_desc[irq].chip->set_affinity(irq, mask);
                else if (irq_desc[irq].action && !(warned++))
                        printk("Cannot set affinity for irq %i\n", irq);
        }
index 97a0591..535312c 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/notifier.h>
 #include <linux/cpu.h>
 #include <linux/delay.h>
-#include <linux/vs_context.h>
 
 DEFINE_PER_CPU(irq_cpustat_t, irq_stat) ____cacheline_internodealigned_in_smp;
 EXPORT_PER_CPU_SYMBOL(irq_stat);
@@ -56,7 +55,6 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
 {      
        /* high bit used in ret_from_ code */
        int irq = ~regs->orig_eax;
-       struct vx_info_save vxis;
 #ifdef CONFIG_4KSTACKS
        union irq_ctx *curctx, *irqctx;
        u32 *isp;
@@ -83,7 +81,6 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
                }
        }
 #endif
-       __enter_vx_admin(&vxis);
 #ifdef CONFIG_4KSTACKS
 
        curctx = (union irq_ctx *) current_thread_info();
@@ -122,7 +119,6 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
        } else
 #endif
                __do_IRQ(irq, regs);
-       __leave_vx_admin(&vxis);
 
        irq_exit();
 
index dcbd66d..26ede85 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/mman.h>
 #include <linux/file.h>
 #include <linux/utsname.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #include <asm/uaccess.h>
index cc8eb3b..0cc7b29 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/elf.h>
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/cpufeature.h>
index f53b244..34c5104 100644 (file)
@@ -52,7 +52,6 @@
 #include <linux/radix-tree.h>
 #include <linux/mutex.h>
 #include <linux/bootmem.h>
-#include <linux/vs_context.h>
 
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -219,9 +218,6 @@ void do_IRQ(struct pt_regs *regs)
        irq = ppc_md.get_irq(regs);
 
        if (irq != NO_IRQ && irq != NO_IRQ_IGNORE) {
-               struct vx_info_save vxis;
-
-               __enter_vx_admin(&vxis);
 #ifdef CONFIG_IRQSTACKS
                /* Switch to the irq stack to handle this */
                curtp = current_thread_info();
@@ -240,7 +236,6 @@ void do_IRQ(struct pt_regs *regs)
                } else
 #endif
                        generic_handle_irq(irq, regs);
-               __leave_vx_admin(&vxis);
        } else if (irq != NO_IRQ_IGNORE)
                /* That's not SMP safe ... but who cares ? */
                ppc_spurious_interrupts++;
index 6f5bafb..b0df464 100644 (file)
@@ -114,7 +114,6 @@ int unregister_early_external_interrupt(__u16 code, ext_int_handler_t handler,
 void do_extint(struct pt_regs *regs, unsigned short code)
 {
         ext_int_info_t *p;
-       struct vx_info_save vxis;
         int index;
 
        irq_enter();
@@ -127,14 +126,12 @@ void do_extint(struct pt_regs *regs, unsigned short code)
                account_ticks(regs);
        kstat_cpu(smp_processor_id()).irqs[EXTERNAL_INTERRUPT]++;
         index = ext_hash(code);
-       __enter_vx_admin(&vxis);
        for (p = ext_int_hash[index]; p; p = p->next) {
                if (likely(p->code == code)) {
                        if (likely(p->handler))
                                p->handler(regs, code);
                }
        }
-       __leave_vx_admin(&vxis);
        irq_exit();
 }
 
index 1c7e6e3..72f0201 100644 (file)
@@ -29,7 +29,6 @@
 #include <linux/threads.h>
 #include <linux/spinlock.h>
 #include <linux/seq_file.h>
-#include <linux/vs_context.h>
 
 #include <asm/ptrace.h>
 #include <asm/processor.h>
@@ -322,7 +321,6 @@ void handler_irq(int irq, struct pt_regs * regs)
 {
        struct irqaction * action;
        int cpu = smp_processor_id();
-       struct vx_info_save vxis;
 #ifdef CONFIG_SMP
        extern void smp4m_irq_rotate(int cpu);
 #endif
@@ -337,14 +335,12 @@ void handler_irq(int irq, struct pt_regs * regs)
        action = sparc_irq[irq].action;
        sparc_irq[irq].flags |= SPARC_IRQ_INPROGRESS;
        kstat_cpu(cpu).irqs[irq]++;
-       __enter_vx_admin(&vxis);
        do {
                if (!action || !action->handler)
                        unexpected_irq(irq, NULL, regs);
                action->handler(irq, action->dev_id, regs);
                action = action->next;
        } while (action);
-       __leave_vx_admin(&vxis);
        sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS;
        enable_pil_irq(irq);
        irq_exit();
@@ -356,14 +352,11 @@ extern void floppy_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs)
 {
        int cpu = smp_processor_id();
-       struct vx_info_save vxis;
 
        disable_pil_irq(irq);
        irq_enter();
        kstat_cpu(cpu).irqs[irq]++;
-       __enter_vx_admin(&vxis);
        floppy_interrupt(irq, dev_id, regs);
-       __leave_vx_admin(&vxis);
        irq_exit();
        enable_pil_irq(irq);
        // XXX Eek, it's totally changed with preempt_count() and such
index e271941..77f51b5 100644 (file)
@@ -200,7 +200,6 @@ extern void unexpected_irq(int, void *, struct pt_regs *);
 void sun4d_handler_irq(int irq, struct pt_regs * regs)
 {
        struct irqaction * action;
-       struct vx_info_save vxis;
        int cpu = smp_processor_id();
        /* SBUS IRQ level (1 - 7) */
        int sbusl = pil_to_sbus[irq];
@@ -212,7 +211,6 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs)
        
        irq_enter();
        kstat_cpu(cpu).irqs[irq]++;
-       __enter_vx_admin(&vxis);
        if (!sbusl) {
                action = *(irq + irq_action);
                if (!action)
@@ -252,7 +250,6 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs)
                                        }
                        }
        }
-       __leave_vx_admin(&vxis);
        irq_exit();
 }
 
index 3068ce2..05ddad3 100644 (file)
@@ -26,6 +26,30 @@ atomic_t irq_mis_count;
 #endif
 #endif
 
+#ifdef CONFIG_DEBUG_STACKOVERFLOW
+/*
+ * Probabilistic stack overflow check:
+ *
+ * Only check the stack in process context, because everything else
+ * runs on the big interrupt stacks. Checking reliably is too expensive,
+ * so we just check from interrupts.
+ */
+static inline void stack_overflow_check(struct pt_regs *regs)
+{
+       u64 curbase = (u64) current->thread_info;
+       static unsigned long warned = -60*HZ;
+
+       if (regs->rsp >= curbase && regs->rsp <= curbase + THREAD_SIZE &&
+           regs->rsp <  curbase + sizeof(struct thread_info) + 128 &&
+           time_after(jiffies, warned + 60*HZ)) {
+               printk("do_IRQ: %s near stack overflow (cur:%Lx,rsp:%lx)\n",
+                      current->comm, curbase, regs->rsp);
+               show_stack(NULL,NULL);
+               warned = jiffies;
+       }
+}
+#endif
+
 /*
  * Generic, controller-independent functions:
  */
@@ -39,7 +63,7 @@ int show_interrupts(struct seq_file *p, void *v)
        if (i == 0) {
                seq_printf(p, "           ");
                for_each_online_cpu(j)
-                       seq_printf(p, "CPU%d       ",j);
+                       seq_printf(p, "CPU%-8d       ",j);
                seq_putc(p, '\n');
        }
 
@@ -55,7 +79,7 @@ int show_interrupts(struct seq_file *p, void *v)
                for_each_online_cpu(j)
                        seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
 #endif
-               seq_printf(p, " %14s", irq_desc[i].handler->typename);
+               seq_printf(p, " %14s", irq_desc[i].chip->typename);
 
                seq_printf(p, "  %s", action->name);
                for (action=action->next; action; action = action->next)
@@ -94,9 +118,18 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
        /* high bit used in ret_from_ code  */
        unsigned irq = ~regs->orig_rax;
 
+       if (unlikely(irq >= NR_IRQS)) {
+               printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
+                                       __FUNCTION__, irq);
+               BUG();
+       }
+
        exit_idle();
        irq_enter();
 
+#ifdef CONFIG_DEBUG_STACKOVERFLOW
+       stack_overflow_check(regs);
+#endif
        __do_IRQ(irq, regs);
        irq_exit();
 
@@ -114,13 +147,13 @@ void fixup_irqs(cpumask_t map)
                if (irq == 2)
                        continue;
 
-               cpus_and(mask, irq_affinity[irq], map);
+               cpus_and(mask, irq_desc[irq].affinity, map);
                if (any_online_cpu(mask) == NR_CPUS) {
                        printk("Breaking affinity for irq %i\n", irq);
                        mask = map;
                }
-               if (irq_desc[irq].handler->set_affinity)
-                       irq_desc[irq].handler->set_affinity(irq, mask);
+               if (irq_desc[irq].chip->set_affinity)
+                       irq_desc[irq].chip->set_affinity(irq, mask);
                else if (irq_desc[irq].action && !(warned++))
                        printk("Cannot set affinity for irq %i\n", irq);
        }
@@ -145,8 +178,10 @@ asmlinkage void do_softirq(void)
        local_irq_save(flags);
        pending = local_softirq_pending();
        /* Switch to interrupt stack */
-       if (pending)
+       if (pending) {
                call_softirq();
+               WARN_ON_ONCE(softirq_count());
+       }
        local_irq_restore(flags);
 }
 EXPORT_SYMBOL(do_softirq);
index b35bf49..e775b84 100644 (file)
@@ -72,6 +72,7 @@
 #include <linux/completion.h>
 #include <linux/highmem.h>
 #include <linux/gfp.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 
 #include <asm/uaccess.h>
@@ -743,7 +744,6 @@ static int loop_set_fd(struct loop_device *lo, struct file *lo_file,
        struct file     *file, *f;
        struct inode    *inode;
        struct address_space *mapping;
-       struct vx_info_save vxis;
        unsigned lo_blocksize;
        int             lo_flags = 0;
        int             error;
@@ -842,9 +842,7 @@ static int loop_set_fd(struct loop_device *lo, struct file *lo_file,
 
        set_blocksize(bdev, lo_blocksize);
 
-       __enter_vx_admin(&vxis);
        error = kernel_thread(loop_thread, lo, CLONE_KERNEL);
-       __leave_vx_admin(&vxis);
        if (error < 0)
                goto out_putf;
        wait_for_completion(&lo->lo_done);
index d70a259..855abea 100644 (file)
 #include <linux/selection.h>
 
 #include <linux/kmod.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #undef TTY_DEBUG_HANGUP
index d0148e5..15874c8 100644 (file)
@@ -640,16 +640,13 @@ do_IRQ (struct pt_regs *regs)
                        spin_lock(&sch->lock);
                /* Store interrupt response block to lowcore. */
                if (tsch (tpi_info->schid, irb) == 0 && sch) {
-                       struct vx_info_save vxis;
 
                        /* Keep subchannel information word up to date. */
                        memcpy (&sch->schib.scsw, &irb->scsw,
                                sizeof (irb->scsw));
                        /* Call interrupt handler if there is one. */
-                       __enter_vx_admin(&vxis);
                        if (sch->driver && sch->driver->irq)
                                sch->driver->irq(&sch->dev);
-                       __leave_vx_admin(&vxis);
                }
                if (sch)
                        spin_unlock(&sch->lock);
index bb1c58c..92d9d73 100644 (file)
--- a/fs/attr.c
+++ b/fs/attr.c
@@ -17,6 +17,7 @@
 #include <linux/security.h>
 #include <linux/proc_fs.h>
 #include <linux/devpts_fs.h>
+#include <linux/vs_base.h>
 #include <linux/vserver/debug.h>
 
 /* Taken over from the old code... */
index d1fe43b..f147884 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/binfmts.h>
 #include <linux/personality.h>
 #include <linux/init.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/system.h>
index 8f2bd09..8a5231a 100644 (file)
 #include <linux/syscalls.h>
 #include <linux/random.h>
 #include <linux/elf.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 #include <linux/vs_cvirt.h>
+
 #include <asm/uaccess.h>
 #include <asm/param.h>
 #include <asm/page.h>
 
+
 static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs);
 static int load_elf_library(struct file *);
 static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int, unsigned long);
index e16f42d..6e8dfdb 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/elf.h>
 #include <linux/elf-fdpic.h>
 #include <linux/elfcore.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #include <asm/uaccess.h>
index a37a000..7cd68c6 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/init.h>
 #include <linux/flat.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/byteorder.h>
index c927dc5..8f6da39 100644 (file)
 #include <linux/shm.h>
 #include <linux/personality.h>
 #include <linux/init.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
+
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
 
-
 #include <linux/elf.h>
 
 static int load_som_binary(struct linux_binprm * bprm, struct pt_regs * regs);
index b44d791..03d1b3c 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/tty.h>
 #include <linux/devpts_fs.h>
 #include <linux/parser.h>
+#include <linux/vs_base.h>
 
 
 static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd)
index c567e1a..5057a30 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -49,6 +49,7 @@
 #include <linux/acct.h>
 #include <linux/cn_proc.h>
 #include <linux/audit.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 #include <linux/vs_cvirt.h>
 
index 117ebb9..a49381f 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/sched.h>
 #include <linux/buffer_head.h>
 #include <linux/capability.h>
+#include <linux/vs_base.h>
 #include <linux/vs_dlimit.h>
 
 /*
index 537114b..9de5e42 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/ext3_jbd.h>
 #include <linux/quotaops.h>
 #include <linux/buffer_head.h>
+#include <linux/vs_base.h>
 #include <linux/vs_dlimit.h>
 
 /*
index 3b9ab5f..05a913a 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/ptrace.h>
 #include <linux/signal.h>
 #include <linux/rcupdate.h>
+#include <linux/vs_base.h>
 #include <linux/vs_limit.h>
 
 #include <asm/poll.h>
index 4a90726..0dbfdb4 100644 (file)
@@ -21,8 +21,9 @@
 #include <linux/fsnotify.h>
 #include <linux/sysctl.h>
 #include <linux/percpu_counter.h>
-#include <linux/vs_limit.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
+#include <linux/vs_limit.h>
 
 #include <asm/atomic.h>
 
index 359fa70..38b0ca6 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/capability.h>
 #include <linux/syscalls.h>
 #include <linux/security.h>
+#include <linux/vs_base.h>
 
 static int set_task_ioprio(struct task_struct *task, int ioprio)
 {
index 7db2eea..782f4c9 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/sunrpc/svc.h>
 #include <linux/lockd/lockd.h>
 #include <linux/lockd/sm_inter.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #define NLMDBG_FACILITY                NLMDBG_CLIENT
index af50ed2..d3501fa 100644 (file)
 #include <linux/syscalls.h>
 #include <linux/time.h>
 #include <linux/rcupdate.h>
+#include <linux/vs_base.h>
 #include <linux/vs_limit.h>
 
 #include <asm/semaphore.h>
index 9fe8518..28b37bc 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/fcntl.h>
 #include <linux/namei.h>
 #include <linux/proc_fs.h>
+#include <linux/vs_base.h>
 #include <linux/vserver/inode.h>
 #include <linux/vserver/debug.h>
 #include <asm/namei.h>
index 4bcb3ae..b09441d 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/namei.h>
 #include <linux/security.h>
 #include <linux/mount.h>
+#include <linux/vs_base.h>
 #include <linux/vserver/namespace.h>
 #include <linux/vserver/xid.h>
 #include <asm/uaccess.h>
index 2d18b43..aa0cd58 100644 (file)
@@ -86,6 +86,7 @@
 #include <linux/root_dev.h>
 #include <net/ipconfig.h>
 #include <linux/parser.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 /* Define this to allow debugging output */
index bda0a59..fcff055 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -28,6 +28,7 @@
 #include <linux/syscalls.h>
 #include <linux/rcupdate.h>
 #include <linux/audit.h>
+#include <linux/vs_base.h>
 #include <linux/vs_limit.h>
 #include <linux/vs_dlimit.h>
 #include <linux/vserver/xid.h>
index 765cc29..ded4833 100644 (file)
@@ -76,8 +76,6 @@
 #include <linux/tracehook.h>
 #include <linux/rcupdate.h>
 #include <linux/delayacct.h>
-#include <linux/vs_context.h>
-#include <linux/vs_network.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
index a761981..0e73286 100644 (file)
@@ -72,8 +72,6 @@
 #include <linux/cpuset.h>
 #include <linux/audit.h>
 #include <linux/poll.h>
-#include <linux/vs_context.h>
-#include <linux/vs_network.h>
 
 #include "internal.h"
 
index d370ce7..b688674 100644 (file)
  */
 
 #include <linux/proc_fs.h>
+#include <linux/vs_base.h>
+#include <linux/vs_context.h>
 #include <linux/vs_cvirt.h>
+#include <linux/vs_network.h>
 
 struct vmalloc_info {
        unsigned long   used;
index e41f91d..f8eebe6 100644 (file)
@@ -51,7 +51,6 @@
 #include <asm/tlb.h>
 #include <asm/div64.h>
 #include "internal.h"
-#include <linux/vs_cvirt.h>
 
 #define LOAD_INT(x) ((x) >> FSHIFT)
 #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
index 56ff735..13aba5c 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/quotaops.h>
 #include <linux/major.h>
 #include <linux/blkdev.h>
+#include <linux/vs_base.h>
 #include <linux/vserver/debug.h>
 
 /* Check validity of generic quotactl commands */
index d3c66fb..8436718 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/devpts_fs.h>
 #include <linux/proc_fs.h>
 #include <asm/uaccess.h>
+#include <linux/vs_base.h>
 
 
 void get_filesystem(struct file_system_type *fs);
index e119e19..867d900 100644 (file)
@@ -14,7 +14,6 @@
 #define _ASM_GENERIC__TLB_H
 
 #include <linux/swap.h>
-#include <linux/vs_memory.h>
 #include <asm/pgalloc.h>
 #include <asm/tlbflush.h>
 
index bd6c826..a5a8be4 100644 (file)
@@ -52,7 +52,6 @@ struct sched_param {
 #include <linux/cpumask.h>
 #include <linux/errno.h>
 #include <linux/nodemask.h>
-#include <linux/vs_base.h>
 
 #include <asm/system.h>
 #include <asm/semaphore.h>
index b2dfad6..54ce343 100644 (file)
@@ -3,12 +3,15 @@
 
 #include "vserver/context.h"
 
+#define VX_IRQ        0x4000
+#define VX_IRQ_MASK   0xF000
+#include <linux/hardirq.h>
 
 #define vx_task_xid(t) ((t)->xid)
 
 #define vx_current_xid() vx_task_xid(current)
 
-#define vx_check(c,m)  __vx_check(vx_current_xid(),c,m)
+#define vx_check(c,m)  __vx_check(vx_current_xid(),c,m|VX_IRQ)
 
 #define vx_weak_check(c,m)     ((m) ? vx_check(c,m) : 1)
 
@@ -33,6 +36,9 @@ static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
                        (id > 1) && (id < MIN_D_CONTEXT))
                        return 1;
        }
+       if ((mode & VX_IRQ) && (unlikely(in_interrupt())))
+               return 1;
+
        return (((mode & VX_ADMIN) && (cid == 0)) ||
                ((mode & VX_WATCH) && (cid == 1)) ||
                ((mode & VX_HOSTID) && (id == 0)));
@@ -100,7 +106,6 @@ static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
 #define vx_capable(b,c) (capable(b) || \
        ((current->euid == 0) && vx_ccaps(c)))
 
-
 #else
 #warning duplicate inclusion
 #endif
index b483a03..2412bb6 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/un.h>
 #include <linux/mutex.h>
 #include <net/sock.h>
+#include <linux/vs_base.h>
 
 extern void unix_inflight(struct file *fp);
 extern void unix_notinflight(struct file *fp);
index 4bacfbe..3caecb5 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/route.h>
 #include <linux/ip.h>
 #include <linux/cache.h>
+#include <linux/vs_base.h>
 #include <linux/vs_network.h>
 #include <linux/in.h>
 
index 5e09476..247d3a1 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/audit.h>
 #include <linux/signal.h>
 #include <linux/mutex.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_limit.h>
 
index cc20763..46942e7 100644 (file)
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -31,6 +31,7 @@
 #include <linux/audit.h>
 #include <linux/seq_file.h>
 #include <linux/mutex.h>
+#include <linux/vs_base.h>
 
 #include <asm/current.h>
 #include <asm/uaccess.h>
index b3cbd4c..193b78d 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -78,6 +78,7 @@
 #include <linux/capability.h>
 #include <linux/seq_file.h>
 #include <linux/mutex.h>
+#include <linux/vs_base.h>
 
 #include <asm/uaccess.h>
 #include "util.h"
index 4337460..13b6b8c 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -32,6 +32,7 @@
 #include <linux/ptrace.h>
 #include <linux/seq_file.h>
 #include <linux/mutex.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_limit.h>
 
index 65efa37..01ed75c 100644 (file)
@@ -29,7 +29,7 @@
 #include <linux/seq_file.h>
 #include <linux/proc_fs.h>
 #include <linux/audit.h>
-
+#include <linux/vs_base.h>
 #include <asm/unistd.h>
 
 #include "util.h"
index 6e3c421..31978a5 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/security.h>
 #include <linux/syscalls.h>
 #include <asm/uaccess.h>
+#include <linux/vs_base.h>
 
 unsigned securebits = SECUREBITS_DEFAULT; /* systemwide security settings */
 kernel_cap_t cap_bset = CAP_INIT_EFF_SET;
index 80530fb..334a693 100644 (file)
 #include <linux/pipe_fs_i.h>
 #include <linux/audit.h> /* for audit_free() */
 #include <linux/resource.h>
-#include <linux/vs_limit.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
+#include <linux/vs_limit.h>
 
 #include <asm/uaccess.h>
 #include <asm/unistd.h>
index adfa448..12a9b21 100644 (file)
@@ -45,6 +45,7 @@
 #include <linux/cn_proc.h>
 #include <linux/delayacct.h>
 #include <linux/taskstats_kern.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vs_limit.h>
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;
index 5eeb505..c33fb1c 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/init.h>
 #include <linux/bootmem.h>
 #include <linux/hash.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #define pid_hashfn(nr) hash_long((unsigned long)nr, pidhash_shift)
index c1014d3..aa52590 100644 (file)
@@ -48,6 +48,7 @@
 #include <linux/wait.h>
 #include <linux/workqueue.h>
 #include <linux/module.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 
 /*
index 913dca3..ddebdcc 100644 (file)
@@ -33,8 +33,8 @@
 #include <linux/security.h>
 #include <linux/bootmem.h>
 #include <linux/syscalls.h>
-#include <linux/vs_context.h>
-#include <linux/vserver/cvirt.h>
+#include <linux/vs_base.h>
+#include <linux/vs_cvirt.h>
 
 #include <asm/uaccess.h>
 
@@ -542,10 +542,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)
        char *p;
        static char printk_buf[1024];
        static int log_level_unknown = 1;
-       struct vx_info_save vxis;
 
        preempt_disable();
-       __enter_vx_admin(&vxis);
        if (unlikely(oops_in_progress) && printk_cpu == smp_processor_id())
                /* If a crash is occurring during printk() on this CPU,
                 * make sure we can't deadlock */
@@ -654,7 +652,6 @@ asmlinkage int vprintk(const char *fmt, va_list args)
                local_irq_restore(flags);
        }
 
-       __leave_vx_admin(&vxis);
        preempt_enable();
        return printed_len;
 }
index ee0b4cb..c4968e3 100644 (file)
@@ -28,6 +28,8 @@
 #include <asm/tracehook.h>
 #endif
 
+#include <linux/vs_base.h>
+
 int getrusage(struct task_struct *, int, struct rusage __user *);
 
 //#define PTRACE_DEBUG
index 54b5842..b711280 100644 (file)
 #include <linux/acct.h>
 #include <linux/kprobes.h>
 #include <linux/delayacct.h>
-#include <asm/tlb.h>
-
-#include <asm/unistd.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 #include <linux/vs_context.h>
 #include <linux/vs_cvirt.h>
 #include <linux/vs_sched.h>
 
+#include <asm/tlb.h>
+#include <asm/unistd.h>
+
 /*
  * Convert user-nice values [ -20 ... 0 ... 19 ]
  * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
index b25ab79..73b60c2 100644 (file)
@@ -28,6 +28,7 @@
 #include <asm/unistd.h>
 #include <asm/siginfo.h>
 #include "audit.h"     /* audit_signal_info() */
+#include <linux/vs_base.h>
 
 /*
  * SLAB caches for signal bits.
index 87e835b..3789ca9 100644 (file)
@@ -17,7 +17,6 @@
 #include <linux/kthread.h>
 #include <linux/rcupdate.h>
 #include <linux/smp.h>
-#include <linux/vs_context.h>
 
 #include <asm/irq.h>
 /*
@@ -206,7 +205,6 @@ EXPORT_SYMBOL(local_bh_enable_ip);
 
 asmlinkage void __do_softirq(void)
 {
-       struct vx_info_save vxis;
        struct softirq_action *h;
        __u32 pending;
        int max_restart = MAX_SOFTIRQ_RESTART;
@@ -216,7 +214,6 @@ asmlinkage void __do_softirq(void)
        account_system_vtime(current);
 
        __local_bh_disable((unsigned long)__builtin_return_address(0));
-       __enter_vx_admin(&vxis);
        trace_softirq_enter();
 
        cpu = smp_processor_id();
@@ -248,7 +245,6 @@ restart:
 
        trace_softirq_exit();
 
-       __leave_vx_admin(&vxis);
        account_system_vtime(current);
        _local_bh_enable();
 }
index a87239d..3e7609e 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/tty.h>
 #include <linux/signal.h>
 #include <linux/cn_proc.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 
 #include <linux/compat.h>
index 84a947f..7223ffc 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/cpu.h>
 #include <linux/syscalls.h>
 #include <linux/delay.h>
+#include <linux/vs_base.h>
 #include <linux/vs_cvirt.h>
 #include <linux/vserver/sched.h>
 
index aa2b220..54f4ebc 100644 (file)
 #include <linux/namespace.h>
 
 #include <linux/sched.h>
+#include <linux/vs_base.h>
+#include <linux/vs_context.h>
+#include <linux/vs_limit.h>
 #include <linux/vserver/network.h>
 #include <linux/vserver/legacy.h>
 #include <linux/vserver/limit.h>
 #include <linux/vserver/debug.h>
 #include <linux/vserver/limit_int.h>
-
-#include <linux/vs_context.h>
-#include <linux/vs_limit.h>
 #include <linux/vserver/context_cmd.h>
 
 #include <linux/err.h>
index fb0684f..acd642c 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/sched.h>
 #include <linux/sysctl.h>
 #include <linux/types.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_cvirt.h>
 #include <linux/vserver/switch.h>
index ec1a0b2..7022882 100644 (file)
 #include <linux/namei.h>
 #include <linux/statfs.h>
 #include <linux/compat.h>
-#include <linux/vserver/switch.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_dlimit.h>
+#include <linux/vserver/switch.h>
 #include <linux/vserver/dlimit_cmd.h>
 
 #include <asm/errno.h>
index c336ba2..da4dcf2 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/kmod.h>
 #include <linux/sched.h>
 #include <linux/reboot.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vserver/signal.h>
index b0db3bd..d2882ef 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/proc_fs.h>
 #include <linux/devpts_fs.h>
index f8a657a..8d67731 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vserver/legacy.h>
index 67d133c..0e66a43 100644 (file)
  *
  */
 
-#include <linux/config.h>
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vserver/legacy.h>
-#include <linux/vserver/namespace.h>
 #include <linux/namespace.h>
+#include <linux/err.h>
 
 #include <asm/errno.h>
 #include <asm/uaccess.h>
@@ -39,14 +39,14 @@ int vc_set_ipv4root(uint32_t nbip, void __user *data)
                return -EFAULT;
 
        if (!nxi || nxi->ipv4[0] == 0 || capable(CAP_NET_ADMIN))
-               // We are allowed to change everything
+               /* We are allowed to change everything */
                err = 0;
        else if (nxi) {
                int found = 0;
 
-               // We are allowed to select a subset of the currently
-               // installed IP numbers. No new one allowed
-               // We can't change the broadcast address though
+               /* We are allowed to select a subset of the currently
+                  installed IP numbers. No new one are allowed
+                  We can't change the broadcast address though */
                for (i=0; i<nbip; i++) {
                        int j;
                        __u32 nxip = vc_data.nx_mask_pair[i].ip;
@@ -65,7 +65,7 @@ int vc_set_ipv4root(uint32_t nbip, void __user *data)
                return err;
 
        new_nxi = create_nx_info();
-       if (!new_nxi)
+       if (IS_ERR(new_nxi))
                return -EINVAL;
 
        new_nxi->nbipv4 = nbip;
@@ -74,14 +74,10 @@ int vc_set_ipv4root(uint32_t nbip, void __user *data)
                new_nxi->mask[i] = vc_data.nx_mask_pair[i].mask;
        }
        new_nxi->v4_bcast = vc_data.broadcast;
-       // current->nx_info = new_nxi;
-       if (nxi) {
+       if (nxi)
                printk("!!! switching nx_info %p->%p\n", nxi, new_nxi);
-               clr_nx_info(&current->nx_info);
-       }
+
        nx_migrate_task(current, new_nxi);
-       // set_nx_info(&current->nx_info, new_nxi);
-       // current->nid = new_nxi->nx_id;
        put_nx_info(new_nxi);
        return 0;
 }
index 18dba6c..c47f54c 100644 (file)
@@ -10,9 +10,9 @@
  */
 
 #include <linux/module.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_limit.h>
-#include <linux/vserver/limit.h>
 #include <linux/vserver/switch.h>
 #include <linux/vserver/limit_cmd.h>
 
index 2c46f98..c1dc38d 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <linux/utsname.h>
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vserver/namespace.h>
 #include <linux/vserver/namespace_cmd.h>
index 1ceb1fc..3a8eae1 100644 (file)
@@ -14,9 +14,9 @@
  */
 
 #include <linux/slab.h>
-#include <linux/vserver/network_cmd.h>
 #include <linux/rcupdate.h>
 #include <net/tcp.h>
+#include <linux/vserver/network_cmd.h>
 
 #include <asm/errno.h>
 
index b16949b..3d27dd8 100644 (file)
 #include <linux/errno.h>
 #include <linux/proc_fs.h>
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vs_cvirt.h>
-
 #include <linux/vserver/switch.h>
 
 #include <asm/uaccess.h>
index 9dae08b..b76a72c 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include <linux/sched.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_sched.h>
 #include <linux/vserver/sched_cmd.h>
index b11a3a3..6779bb8 100644 (file)
  */
 
 #include <linux/sched.h>
-
 #include <asm/errno.h>
 #include <asm/uaccess.h>
 
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vserver/signal_cmd.h>
 
index bbf1aef..6bfcfca 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/compat.h>
 #include <asm/errno.h>
 
+#include <linux/vs_base.h>
 #include <linux/vserver/network.h>
 #include <linux/vserver/switch.h>
 #include <linux/vserver/debug.h>
index 04a983a..fb957bf 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/module.h>
 #include <linux/uio.h>
 #include <linux/rmap.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 #include <asm/tlbflush.h>
 #include "filemap.h"
index 7be2ae6..66886d9 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/rmap.h>
 #include <linux/module.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/mmu_context.h>
index f5a8cb2..b6f53b0 100644 (file)
 #include <linux/mempolicy.h>
 #include <linux/cpuset.h>
 #include <linux/mutex.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
 
 #include <linux/hugetlb.h>
-#include <linux/vs_memory.h>
 #include "internal.h"
 
 const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL;
index 45a8199..90acc55 100644 (file)
@@ -50,6 +50,8 @@
 #include <linux/delayacct.h>
 #include <linux/init.h>
 #include <linux/writeback.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
index 6ea2ee0..99e7709 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/mm.h>
 #include <linux/mempolicy.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 
index 5d92d30..3ea3ddc 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -26,6 +26,8 @@
 #include <linux/mempolicy.h>
 #include <linux/rmap.h>
 #include <linux/random.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 
 #include <asm/uaccess.h>
 #include <asm/cacheflush.h>
index 989af55..9fe68aa 100644 (file)
 #include <linux/highmem.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/uaccess.h>
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
 
+
 static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
 {
        pgd_t *pgd;
index 2fff336..d4d25f8 100644 (file)
@@ -27,6 +27,8 @@
 #include <linux/personality.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 
 #include <asm/uaccess.h>
 #include <asm/tlb.h>
index 4cd6faf..7de09d0 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/vmalloc.h>
 #include <linux/mempolicy.h>
 #include <linux/stop_machine.h>
+#include <linux/vs_base.h>
 #include <linux/vs_limit.h>
 
 #include <asm/tlbflush.h>
index bca42f9..5d507c3 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -54,6 +54,7 @@
 #include <linux/rcupdate.h>
 #include <linux/module.h>
 #include <linux/kallsyms.h>
+#include <linux/vs_base.h>
 #include <linux/vs_memory.h>
 
 #include <asm/tlbflush.h>
index e6a6a5b..c25ffae 100644 (file)
 #include <linux/mutex.h>
 #include <linux/capability.h>
 #include <linux/syscalls.h>
+#include <linux/vs_base.h>
+#include <linux/vs_memory.h>
 
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
 #include <linux/swapops.h>
-#include <linux/vs_memory.h>
 
 DEFINE_SPINLOCK(swap_lock);
 unsigned int nr_swapfiles;
index 4a54e88..ea63c08 100644 (file)
 #include <linux/dmaengine.h>
 #include <linux/err.h>
 #include <linux/ctype.h>
+#include <linux/vs_base.h>
 #include <linux/vs_network.h>
 
 #ifdef CONFIG_XEN
index dbd5c11..1d28cbc 100644 (file)
@@ -56,6 +56,7 @@
 #include <linux/types.h>
 #include <linux/audit.h>
 #include <linux/selinux.h>
+#include <linux/vs_base.h>
 #include <linux/vs_context.h>
 #include <linux/vs_network.h>
 #include <linux/vs_limit.h>
index a3ea895..d6ba6ef 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/errno.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/spinlock.h>
-#include <linux/vserver/xid.h>
+#include <linux/vs_base.h>
 
 #ifdef RPC_DEBUG
 # define RPCDBG_FACILITY       RPCDBG_AUTH
index 86da84a..0268e0a 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/module.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/auth.h>
+#include <linux/vs_base.h>
 #include <linux/vserver/xid.h>
 
 #define NFS_NGROUPS    16
index a0b8d82..2148cf5 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/ptrace.h>
 #include <linux/xattr.h>
 #include <linux/hugetlb.h>
+#include <linux/vs_base.h>
 
 int cap_netlink_send(struct sock *sk, struct sk_buff *skb)
 {