From 5cd4d056da050eb96d88540ecfd51245a4e1cdf7 Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Tue, 28 Nov 2006 17:22:10 +0000 Subject: [PATCH] backported vs2.1.x fix to irq handling, which caused incorrect scheduler behavior --- arch/arm/kernel/irq.c | 4 --- arch/arm26/kernel/irq.c | 4 --- arch/frv/kernel/irq.c | 4 --- arch/h8300/kernel/ints.c | 5 ---- arch/h8300/platform/h8s/ints.c | 5 ---- arch/i386/kernel/irq-xen.c | 35 ++++++++++++++++++------- arch/i386/kernel/irq.c | 4 --- arch/i386/kernel/sys_i386.c | 1 + arch/i386/kernel/sysenter.c | 1 + arch/powerpc/kernel/irq.c | 5 ---- arch/s390/kernel/s390_ext.c | 3 --- arch/sparc/kernel/irq.c | 7 ----- arch/sparc/kernel/sun4d_irq.c | 3 --- arch/x86_64/kernel/irq-xen.c | 47 +++++++++++++++++++++++++++++----- drivers/block/loop.c | 4 +-- drivers/char/tty_io.c | 1 + drivers/s390/cio/cio.c | 3 --- fs/attr.c | 1 + fs/binfmt_aout.c | 1 + fs/binfmt_elf.c | 3 +++ fs/binfmt_elf_fdpic.c | 1 + fs/binfmt_flat.c | 1 + fs/binfmt_som.c | 3 ++- fs/devpts/inode.c | 1 + fs/exec.c | 1 + fs/ext2/balloc.c | 1 + fs/ext3/balloc.c | 1 + fs/fcntl.c | 1 + fs/file_table.c | 3 ++- fs/ioprio.c | 1 + fs/lockd/clntproc.c | 1 + fs/locks.c | 1 + fs/namei.c | 1 + fs/namespace.c | 1 + fs/nfs/nfsroot.c | 1 + fs/open.c | 1 + fs/proc/array.c | 2 -- fs/proc/base.c | 2 -- fs/proc/internal.h | 3 +++ fs/proc/proc_misc.c | 1 - fs/quota.c | 1 + fs/super.c | 1 + include/asm-generic/tlb.h | 1 - include/linux/sched.h | 1 - include/linux/vs_base.h | 9 +++++-- include/net/af_unix.h | 1 + include/net/route.h | 1 + ipc/mqueue.c | 1 + ipc/msg.c | 1 + ipc/sem.c | 1 + ipc/shm.c | 1 + ipc/util.c | 2 +- kernel/capability.c | 1 + kernel/exit.c | 3 ++- kernel/fork.c | 1 + kernel/irq/handle.c | 6 +---- kernel/pid.c | 1 + kernel/posix-timers.c | 1 + kernel/printk.c | 7 ++--- kernel/ptrace.c | 2 ++ kernel/sched.c | 8 +++--- kernel/signal.c | 1 + kernel/softirq.c | 4 --- kernel/sys.c | 1 + kernel/timer.c | 1 + kernel/vserver/context.c | 6 ++--- kernel/vserver/cvirt.c | 1 + kernel/vserver/dlimit.c | 3 ++- kernel/vserver/helper.c | 1 + kernel/vserver/inode.c | 1 + kernel/vserver/legacy.c | 1 + kernel/vserver/legacynet.c | 22 +++++++--------- kernel/vserver/limit.c | 2 +- kernel/vserver/namespace.c | 1 + kernel/vserver/network.c | 2 +- kernel/vserver/proc.c | 2 +- kernel/vserver/sched.c | 1 + kernel/vserver/signal.c | 2 +- kernel/vserver/switch.c | 1 + mm/filemap_xip.c | 1 + mm/fremap.c | 1 + mm/hugetlb.c | 3 ++- mm/memory.c | 2 ++ mm/mlock.c | 1 + mm/mmap.c | 2 ++ mm/mremap.c | 2 ++ mm/nommu.c | 2 ++ mm/page_alloc.c | 1 + mm/rmap.c | 1 + mm/swapfile.c | 3 ++- net/core/dev.c | 1 + net/netlink/af_netlink.c | 1 + net/sunrpc/auth.c | 2 +- net/sunrpc/auth_unix.c | 1 + security/commoncap.c | 1 + 95 files changed, 179 insertions(+), 119 deletions(-) diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 4b9757f3b..f54a69d7f 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -37,7 +37,6 @@ #include #include #include -#include #include #include @@ -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(); } diff --git a/arch/arm26/kernel/irq.c b/arch/arm26/kernel/irq.c index 6f5272e59..d87d68b77 100644 --- a/arch/arm26/kernel/irq.c +++ b/arch/arm26/kernel/irq.c @@ -31,7 +31,6 @@ #include #include #include -#include #include #include @@ -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(); } diff --git a/arch/frv/kernel/irq.c b/arch/frv/kernel/irq.c index 1c2a72c1f..08967010b 100644 --- a/arch/frv/kernel/irq.c +++ b/arch/frv/kernel/irq.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -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); diff --git a/arch/h8300/kernel/ints.c b/arch/h8300/kernel/ints.c index 2984a28cb..1488b6ace 100644 --- a/arch/h8300/kernel/ints.c +++ b/arch/h8300/kernel/ints.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -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(); } diff --git a/arch/h8300/platform/h8s/ints.c b/arch/h8300/platform/h8s/ints.c index f103efa88..270440de4 100644 --- a/arch/h8300/platform/h8s/ints.c +++ b/arch/h8300/platform/h8s/ints.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -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(); } diff --git a/arch/i386/kernel/irq-xen.c b/arch/i386/kernel/irq-xen.c index b4a38e4d9..280c8fb4b 100644 --- a/arch/i386/kernel/irq-xen.c +++ b/arch/i386/kernel/irq-xen.c @@ -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); } diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c index 97a05914a..535312cf5 100644 --- a/arch/i386/kernel/irq.c +++ b/arch/i386/kernel/irq.c @@ -18,7 +18,6 @@ #include #include #include -#include 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(); diff --git a/arch/i386/kernel/sys_i386.c b/arch/i386/kernel/sys_i386.c index dcbd66d47..26ede8570 100644 --- a/arch/i386/kernel/sys_i386.c +++ b/arch/i386/kernel/sys_i386.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include diff --git a/arch/i386/kernel/sysenter.c b/arch/i386/kernel/sysenter.c index cc8eb3b32..0cc7b2960 100644 --- a/arch/i386/kernel/sysenter.c +++ b/arch/i386/kernel/sysenter.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index f53b244b1..34c5104c4 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -52,7 +52,6 @@ #include #include #include -#include #include #include @@ -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++; diff --git a/arch/s390/kernel/s390_ext.c b/arch/s390/kernel/s390_ext.c index 6f5bafba7..b0df464b1 100644 --- a/arch/s390/kernel/s390_ext.c +++ b/arch/s390/kernel/s390_ext.c @@ -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(); } diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c index 1c7e6e3ee..72f020105 100644 --- a/arch/sparc/kernel/irq.c +++ b/arch/sparc/kernel/irq.c @@ -29,7 +29,6 @@ #include #include #include -#include #include #include @@ -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 diff --git a/arch/sparc/kernel/sun4d_irq.c b/arch/sparc/kernel/sun4d_irq.c index e271941be..77f51b5cb 100644 --- a/arch/sparc/kernel/sun4d_irq.c +++ b/arch/sparc/kernel/sun4d_irq.c @@ -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(); } diff --git a/arch/x86_64/kernel/irq-xen.c b/arch/x86_64/kernel/irq-xen.c index 3068ce26e..05ddad3c5 100644 --- a/arch/x86_64/kernel/irq-xen.c +++ b/arch/x86_64/kernel/irq-xen.c @@ -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); diff --git a/drivers/block/loop.c b/drivers/block/loop.c index b35bf492c..e775b846e 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -72,6 +72,7 @@ #include #include #include +#include #include #include @@ -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); diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index d70a25995..855abeab6 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c @@ -103,6 +103,7 @@ #include #include +#include #include #undef TTY_DEBUG_HANGUP diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index d0148e5fb..15874c867 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c @@ -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); diff --git a/fs/attr.c b/fs/attr.c index bb1c58cf0..92d9d7357 100644 --- a/fs/attr.c +++ b/fs/attr.c @@ -17,6 +17,7 @@ #include #include #include +#include #include /* Taken over from the old code... */ diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index d1fe43b01..f1478845f 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 8f2bd09a8..8a5231a4c 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -39,12 +39,15 @@ #include #include #include +#include #include #include + #include #include #include + 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); diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index e16f42d73..6e8dfdba0 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c index a37a000d6..7cd68c6d3 100644 --- a/fs/binfmt_flat.c +++ b/fs/binfmt_flat.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include diff --git a/fs/binfmt_som.c b/fs/binfmt_som.c index c927dc56f..8f6da3965 100644 --- a/fs/binfmt_som.c +++ b/fs/binfmt_som.c @@ -28,12 +28,13 @@ #include #include #include +#include #include + #include #include - #include static int load_som_binary(struct linux_binprm * bprm, struct pt_regs * regs); diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index b44d79196..03d1b3cd4 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -19,6 +19,7 @@ #include #include #include +#include static int devpts_permission(struct inode *inode, int mask, struct nameidata *nd) diff --git a/fs/exec.c b/fs/exec.c index c567e1a20..5057a300a 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include diff --git a/fs/ext2/balloc.c b/fs/ext2/balloc.c index 117ebb9ca..a49381f74 100644 --- a/fs/ext2/balloc.c +++ b/fs/ext2/balloc.c @@ -16,6 +16,7 @@ #include #include #include +#include #include /* diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c index 537114b0e..9de5e42ca 100644 --- a/fs/ext3/balloc.c +++ b/fs/ext3/balloc.c @@ -19,6 +19,7 @@ #include #include #include +#include #include /* diff --git a/fs/fcntl.c b/fs/fcntl.c index 3b9ab5fd5..05a913ac2 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include diff --git a/fs/file_table.c b/fs/file_table.c index 4a9072624..0dbfdb47c 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -21,8 +21,9 @@ #include #include #include -#include +#include #include +#include #include diff --git a/fs/ioprio.c b/fs/ioprio.c index 359fa7011..38b0ca6c8 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c @@ -25,6 +25,7 @@ #include #include #include +#include static int set_task_ioprio(struct task_struct *task, int ioprio) { diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c index 7db2eea3f..782f4c98c 100644 --- a/fs/lockd/clntproc.c +++ b/fs/lockd/clntproc.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #define NLMDBG_FACILITY NLMDBG_CLIENT diff --git a/fs/locks.c b/fs/locks.c index af50ed20d..d3501facc 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -125,6 +125,7 @@ #include #include #include +#include #include #include diff --git a/fs/namei.c b/fs/namei.c index 9fe85185a..28b37bce6 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include diff --git a/fs/namespace.c b/fs/namespace.c index 4bcb3ae8f..b09441d09 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/fs/nfs/nfsroot.c b/fs/nfs/nfsroot.c index 2d18b43ac..aa0cd586d 100644 --- a/fs/nfs/nfsroot.c +++ b/fs/nfs/nfsroot.c @@ -86,6 +86,7 @@ #include #include #include +#include #include /* Define this to allow debugging output */ diff --git a/fs/open.c b/fs/open.c index bda0a5982..fcff05571 100644 --- a/fs/open.c +++ b/fs/open.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/fs/proc/array.c b/fs/proc/array.c index 765cc2994..ded4833d7 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -76,8 +76,6 @@ #include #include #include -#include -#include #include #include diff --git a/fs/proc/base.c b/fs/proc/base.c index a76198105..0e732865f 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -72,8 +72,6 @@ #include #include #include -#include -#include #include "internal.h" diff --git a/fs/proc/internal.h b/fs/proc/internal.h index d370ce7f9..b68867436 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -10,7 +10,10 @@ */ #include +#include +#include #include +#include struct vmalloc_info { unsigned long used; diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index e41f91db6..f8eebe6c7 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c @@ -51,7 +51,6 @@ #include #include #include "internal.h" -#include #define LOAD_INT(x) ((x) >> FSHIFT) #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) diff --git a/fs/quota.c b/fs/quota.c index 56ff735bf..13aba5c3b 100644 --- a/fs/quota.c +++ b/fs/quota.c @@ -19,6 +19,7 @@ #include #include #include +#include #include /* Check validity of generic quotactl commands */ diff --git a/fs/super.c b/fs/super.c index d3c66fb31..8436718b5 100644 --- a/fs/super.c +++ b/fs/super.c @@ -40,6 +40,7 @@ #include #include #include +#include void get_filesystem(struct file_system_type *fs); diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index e119e193d..867d9008f 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h @@ -14,7 +14,6 @@ #define _ASM_GENERIC__TLB_H #include -#include #include #include diff --git a/include/linux/sched.h b/include/linux/sched.h index bd6c826f9..a5a8be459 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -52,7 +52,6 @@ struct sched_param { #include #include #include -#include #include #include diff --git a/include/linux/vs_base.h b/include/linux/vs_base.h index b2dfad6a5..54ce34372 100644 --- a/include/linux/vs_base.h +++ b/include/linux/vs_base.h @@ -3,12 +3,15 @@ #include "vserver/context.h" +#define VX_IRQ 0x4000 +#define VX_IRQ_MASK 0xF000 +#include #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 diff --git a/include/net/af_unix.h b/include/net/af_unix.h index b483a036a..2412bb6e9 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h @@ -5,6 +5,7 @@ #include #include #include +#include extern void unix_inflight(struct file *fp); extern void unix_notinflight(struct file *fp); diff --git a/include/net/route.h b/include/net/route.h index 4bacfbef8..3caecb555 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 5e09476c2..247d3a19d 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include diff --git a/ipc/msg.c b/ipc/msg.c index cc2076331..46942e7b4 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include diff --git a/ipc/sem.c b/ipc/sem.c index b3cbd4ce1..193b78dec 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -78,6 +78,7 @@ #include #include #include +#include #include #include "util.h" diff --git a/ipc/shm.c b/ipc/shm.c index 433746060..13b6b8c1f 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/ipc/util.c b/ipc/util.c index 65efa3774..01ed75c23 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -29,7 +29,7 @@ #include #include #include - +#include #include #include "util.h" diff --git a/kernel/capability.c b/kernel/capability.c index 6e3c421f6..31978a5ea 100644 --- a/kernel/capability.c +++ b/kernel/capability.c @@ -13,6 +13,7 @@ #include #include #include +#include unsigned securebits = SECUREBITS_DEFAULT; /* systemwide security settings */ kernel_cap_t cap_bset = CAP_INIT_EFF_SET; diff --git a/kernel/exit.c b/kernel/exit.c index 80530fbcf..334a69366 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -39,9 +39,10 @@ #include #include /* for audit_free() */ #include -#include +#include #include #include +#include #include #include diff --git a/kernel/fork.c b/kernel/fork.c index adfa44841..12a9b2114 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 553a09888..a4c8f4d6f 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #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; diff --git a/kernel/pid.c b/kernel/pid.c index 5eeb50538..c33fb1c93 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #define pid_hashfn(nr) hash_long((unsigned long)nr, pidhash_shift) diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index c1014d358..aa525907e 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c @@ -48,6 +48,7 @@ #include #include #include +#include #include /* diff --git a/kernel/printk.c b/kernel/printk.c index 913dca305..ddebdcc58 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -33,8 +33,8 @@ #include #include #include -#include -#include +#include +#include #include @@ -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; } diff --git a/kernel/ptrace.c b/kernel/ptrace.c index ee0b4cb6d..c4968e35d 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -28,6 +28,8 @@ #include #endif +#include + int getrusage(struct task_struct *, int, struct rusage __user *); //#define PTRACE_DEBUG diff --git a/kernel/sched.c b/kernel/sched.c index 54b58426b..b7112807f 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -52,13 +52,15 @@ #include #include #include -#include - -#include +#include +#include #include #include #include +#include +#include + /* * Convert user-nice values [ -20 ... 0 ... 19 ] * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ], diff --git a/kernel/signal.c b/kernel/signal.c index b25ab79a8..73b60c2d2 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -28,6 +28,7 @@ #include #include #include "audit.h" /* audit_signal_info() */ +#include /* * SLAB caches for signal bits. diff --git a/kernel/softirq.c b/kernel/softirq.c index 87e835b59..3789ca981 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -17,7 +17,6 @@ #include #include #include -#include #include /* @@ -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(); } diff --git a/kernel/sys.c b/kernel/sys.c index a87239d9e..3e7609eeb 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include diff --git a/kernel/timer.c b/kernel/timer.c index 84a947faf..7223ffc96 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include diff --git a/kernel/vserver/context.c b/kernel/vserver/context.c index aa2b22024..54f4ebc9c 100644 --- a/kernel/vserver/context.c +++ b/kernel/vserver/context.c @@ -24,14 +24,14 @@ #include #include +#include +#include +#include #include #include #include #include #include - -#include -#include #include #include diff --git a/kernel/vserver/cvirt.c b/kernel/vserver/cvirt.c index fb0684f7a..acd642c05 100644 --- a/kernel/vserver/cvirt.c +++ b/kernel/vserver/cvirt.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff --git a/kernel/vserver/dlimit.c b/kernel/vserver/dlimit.c index ec1a0b2c0..70228827b 100644 --- a/kernel/vserver/dlimit.c +++ b/kernel/vserver/dlimit.c @@ -15,9 +15,10 @@ #include #include #include -#include +#include #include #include +#include #include #include diff --git a/kernel/vserver/helper.c b/kernel/vserver/helper.c index c336ba26a..da4dcf2b0 100644 --- a/kernel/vserver/helper.c +++ b/kernel/vserver/helper.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include diff --git a/kernel/vserver/inode.c b/kernel/vserver/inode.c index b0db3bd7a..d2882efd7 100644 --- a/kernel/vserver/inode.c +++ b/kernel/vserver/inode.c @@ -10,6 +10,7 @@ */ #include +#include #include #include #include diff --git a/kernel/vserver/legacy.c b/kernel/vserver/legacy.c index f8a657aec..8d67731f3 100644 --- a/kernel/vserver/legacy.c +++ b/kernel/vserver/legacy.c @@ -11,6 +11,7 @@ */ #include +#include #include #include #include diff --git a/kernel/vserver/legacynet.c b/kernel/vserver/legacynet.c index 67d133ca6..0e66a434b 100644 --- a/kernel/vserver/legacynet.c +++ b/kernel/vserver/legacynet.c @@ -11,13 +11,13 @@ * */ -#include #include +#include #include #include #include -#include #include +#include #include #include @@ -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; inbipv4 = 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(¤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; } diff --git a/kernel/vserver/limit.c b/kernel/vserver/limit.c index 18dba6c70..c47f54c78 100644 --- a/kernel/vserver/limit.c +++ b/kernel/vserver/limit.c @@ -10,9 +10,9 @@ */ #include +#include #include #include -#include #include #include diff --git a/kernel/vserver/namespace.c b/kernel/vserver/namespace.c index 2c46f98b0..c1dc38d53 100644 --- a/kernel/vserver/namespace.c +++ b/kernel/vserver/namespace.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include diff --git a/kernel/vserver/network.c b/kernel/vserver/network.c index 1ceb1fcb8..3a8eae14e 100644 --- a/kernel/vserver/network.c +++ b/kernel/vserver/network.c @@ -14,9 +14,9 @@ */ #include -#include #include #include +#include #include diff --git a/kernel/vserver/proc.c b/kernel/vserver/proc.c index b16949bca..3d27dd8a3 100644 --- a/kernel/vserver/proc.c +++ b/kernel/vserver/proc.c @@ -18,10 +18,10 @@ #include #include #include +#include #include #include #include - #include #include diff --git a/kernel/vserver/sched.c b/kernel/vserver/sched.c index 9dae08b1f..b76a72c91 100644 --- a/kernel/vserver/sched.c +++ b/kernel/vserver/sched.c @@ -11,6 +11,7 @@ */ #include +#include #include #include #include diff --git a/kernel/vserver/signal.c b/kernel/vserver/signal.c index b11a3a358..6779bb8d5 100644 --- a/kernel/vserver/signal.c +++ b/kernel/vserver/signal.c @@ -10,10 +10,10 @@ */ #include - #include #include +#include #include #include diff --git a/kernel/vserver/switch.c b/kernel/vserver/switch.c index bbf1aef7c..6bfcfca4d 100644 --- a/kernel/vserver/switch.c +++ b/kernel/vserver/switch.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c index 04a983a34..fb957bf11 100644 --- a/mm/filemap_xip.c +++ b/mm/filemap_xip.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include "filemap.h" diff --git a/mm/fremap.c b/mm/fremap.c index 7be2ae6a5..66886d9dc 100644 --- a/mm/fremap.c +++ b/mm/fremap.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include diff --git a/mm/hugetlb.c b/mm/hugetlb.c index f5a8cb24a..b6f53b071 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -14,12 +14,13 @@ #include #include #include +#include +#include #include #include #include -#include #include "internal.h" const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL; diff --git a/mm/memory.c b/mm/memory.c index 45a81998a..90acc5579 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -50,6 +50,8 @@ #include #include #include +#include +#include #include #include diff --git a/mm/mlock.c b/mm/mlock.c index 6ea2ee06e..99e77097d 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -10,6 +10,7 @@ #include #include #include +#include #include diff --git a/mm/mmap.c b/mm/mmap.c index 5d92d30c2..3ea3ddcf6 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include diff --git a/mm/mremap.c b/mm/mremap.c index 989af55dd..9fe68aad2 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -18,12 +18,14 @@ #include #include #include +#include #include #include #include #include + static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr) { pgd_t *pgd; diff --git a/mm/nommu.c b/mm/nommu.c index 2fff336a2..d4d25f88c 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include #include diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 4cd6faf93..7de09d07d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include diff --git a/mm/rmap.c b/mm/rmap.c index bca42f9d2..5d507c324 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include diff --git a/mm/swapfile.c b/mm/swapfile.c index e6a6a5b9c..c25ffae06 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -27,11 +27,12 @@ #include #include #include +#include +#include #include #include #include -#include DEFINE_SPINLOCK(swap_lock); unsigned int nr_swapfiles; diff --git a/net/core/dev.c b/net/core/dev.c index 4a54e888a..ea63c08b6 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -117,6 +117,7 @@ #include #include #include +#include #include #ifdef CONFIG_XEN diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index dbd5c1100..1d28cbcfe 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index a3ea89579..d6ba6ef51 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #ifdef RPC_DEBUG # define RPCDBG_FACILITY RPCDBG_AUTH diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c index 86da84a46..0268e0a2b 100644 --- a/net/sunrpc/auth_unix.c +++ b/net/sunrpc/auth_unix.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #define NFS_NGROUPS 16 diff --git a/security/commoncap.c b/security/commoncap.c index a0b8d8252..2148cf504 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -23,6 +23,7 @@ #include #include #include +#include int cap_netlink_send(struct sock *sk, struct sk_buff *skb) { -- 2.43.0