#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>
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
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();
}
#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>
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
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();
}
#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>
asmlinkage void do_IRQ(void)
{
struct irq_source *source;
- struct vx_info_save vxis;
int level, cpu;
irq_enter();
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);
#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>
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]) {
} else {
BUG();
}
- __leave_vx_admin(&vxis);
irq_exit();
}
#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>
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) {
} else {
BUG();
}
- __leave_vx_admin(&vxis);
irq_exit();
}
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
/*
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? */
}
}
#endif
-
#ifdef CONFIG_4KSTACKS
curctx = (union irq_ctx *) current_thread_info();
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"
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;
: "0"(isp)
: "memory", "cc", "edx", "ecx", "eax"
);
+ /*
+ * Shouldnt happen, we returned above if in_interrupt():
+ */
+ WARN_ON_ONCE(softirq_count());
}
local_irq_restore(flags);
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');
}
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)
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);
}
#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);
{
/* 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;
}
}
#endif
- __enter_vx_admin(&vxis);
#ifdef CONFIG_4KSTACKS
curctx = (union irq_ctx *) current_thread_info();
} else
#endif
__do_IRQ(irq, regs);
- __leave_vx_admin(&vxis);
irq_exit();
#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>
#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>
#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>
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();
} 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++;
void do_extint(struct pt_regs *regs, unsigned short code)
{
ext_int_info_t *p;
- struct vx_info_save vxis;
int index;
irq_enter();
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();
}
#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>
{
struct irqaction * action;
int cpu = smp_processor_id();
- struct vx_info_save vxis;
#ifdef CONFIG_SMP
extern void smp4m_irq_rotate(int cpu);
#endif
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();
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
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];
irq_enter();
kstat_cpu(cpu).irqs[irq]++;
- __enter_vx_admin(&vxis);
if (!sbusl) {
action = *(irq + irq_action);
if (!action)
}
}
}
- __leave_vx_admin(&vxis);
irq_exit();
}
#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:
*/
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');
}
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)
/* 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();
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);
}
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);
#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>
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;
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);
#include <linux/selection.h>
#include <linux/kmod.h>
+#include <linux/vs_base.h>
#include <linux/vs_cvirt.h>
#undef TTY_DEBUG_HANGUP
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);
#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... */
#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>
#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);
#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>
#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>
#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);
#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)
#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>
#include <linux/sched.h>
#include <linux/buffer_head.h>
#include <linux/capability.h>
+#include <linux/vs_base.h>
#include <linux/vs_dlimit.h>
/*
#include <linux/ext3_jbd.h>
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
+#include <linux/vs_base.h>
#include <linux/vs_dlimit.h>
/*
#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>
#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>
#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)
{
#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
#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>
#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>
#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>
#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 */
#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>
#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>
#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"
*/
#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;
#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)
#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 */
#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);
#define _ASM_GENERIC__TLB_H
#include <linux/swap.h>
-#include <linux/vs_memory.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
#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>
#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)
(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)));
#define vx_capable(b,c) (capable(b) || \
((current->euid == 0) && vx_ccaps(c)))
-
#else
#warning duplicate inclusion
#endif
#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);
#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>
#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>
#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>
#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"
#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>
#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"
#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;
#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>
#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>
#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"
{
struct irq_desc *desc = irq_desc + irq;
struct irqaction *action;
- struct vx_info_save vxis;
unsigned int status;
kstat_this_cpu.irqs[irq]++;
/*
* 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);
/*
* disabled while the handler was running.
*/
desc->chip->end(irq);
- __leave_vx_admin(&vxis);
spin_unlock(&desc->lock);
return 1;
#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)
#include <linux/wait.h>
#include <linux/workqueue.h>
#include <linux/module.h>
+#include <linux/vs_base.h>
#include <linux/vs_context.h>
/*
#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>
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 */
local_irq_restore(flags);
}
- __leave_vx_admin(&vxis);
preempt_enable();
return printed_len;
}
#include <asm/tracehook.h>
#endif
+#include <linux/vs_base.h>
+
int getrusage(struct task_struct *, int, struct rusage __user *);
//#define PTRACE_DEBUG
#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 ],
#include <asm/unistd.h>
#include <asm/siginfo.h>
#include "audit.h" /* audit_signal_info() */
+#include <linux/vs_base.h>
/*
* SLAB caches for signal bits.
#include <linux/kthread.h>
#include <linux/rcupdate.h>
#include <linux/smp.h>
-#include <linux/vs_context.h>
#include <asm/irq.h>
/*
asmlinkage void __do_softirq(void)
{
- struct vx_info_save vxis;
struct softirq_action *h;
__u32 pending;
int max_restart = MAX_SOFTIRQ_RESTART;
account_system_vtime(current);
__local_bh_disable((unsigned long)__builtin_return_address(0));
- __enter_vx_admin(&vxis);
trace_softirq_enter();
cpu = smp_processor_id();
trace_softirq_exit();
- __leave_vx_admin(&vxis);
account_system_vtime(current);
_local_bh_enable();
}
#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>
#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>
#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>
#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>
#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>
#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>
*/
#include <linux/sched.h>
+#include <linux/vs_base.h>
#include <linux/vs_context.h>
#include <linux/proc_fs.h>
#include <linux/devpts_fs.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/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>
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;
return err;
new_nxi = create_nx_info();
- if (!new_nxi)
+ if (IS_ERR(new_nxi))
return -EINVAL;
new_nxi->nbipv4 = nbip;
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(¤t->nx_info);
- }
+
nx_migrate_task(current, new_nxi);
- // set_nx_info(¤t->nx_info, new_nxi);
- // current->nid = new_nxi->nx_id;
put_nx_info(new_nxi);
return 0;
}
*/
#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>
#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>
*/
#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>
#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>
*/
#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>
*/
#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>
#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>
#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"
#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>
#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;
#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>
#include <linux/mm.h>
#include <linux/mempolicy.h>
#include <linux/syscalls.h>
+#include <linux/vs_base.h>
#include <linux/vs_memory.h>
#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>
#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;
#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>
#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>
#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>
#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;
#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
#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>
#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
#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
#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)
{