diff -urNp 2.4.20pre8aa2/arch/x86_64/ia32/ia32entry.S ul-20021001/arch/x86_64/ia32/ia32entry.S --- 2.4.20pre8aa2/arch/x86_64/ia32/ia32entry.S Thu Sep 26 04:14:10 2002 +++ ul-20021001/arch/x86_64/ia32/ia32entry.S Tue Oct 1 02:49:27 2002 @@ -353,7 +353,7 @@ ia32_sys_call_table: .quad sys_ni_syscall /* tux */ .quad sys_ni_syscall /* security */ .quad sys_gettid - .quad sys_readahead /* 225 */ + .quad sys_readahead /* 225 */ .quad sys_setxattr .quad sys_lsetxattr .quad sys_fsetxattr @@ -366,22 +366,19 @@ ia32_sys_call_table: .quad sys_removexattr /* 235 */ .quad sys_lremovexattr .quad sys_fremovexattr - .quad sys_tkill /* 238 */ - .quad sys_ni_syscall /* sendfile64 */ - .quad sys_ni_syscall /* futex */ - .quad sys_ni_syscall /* sched_setaffinity */ - .quad sys_ni_syscall /* sched_getaffinity */ - .quad sys_ni_syscall /* set_threadarea */ - .quad sys_ni_syscall /* get_threadarea */ - .quad sys_ni_syscall /* io_setup */ - .quad sys_ni_syscall /* io_destroy */ - .quad sys_ni_syscall /* io_getevents */ - .quad sys_ni_syscall /* io_submit */ - .quad sys_ni_syscall /* io_cancel */ - .quad sys_ni_syscall /* alloc_hugepages */ - .quad sys_ni_syscall /* free_hugepages */ - .quad sys_ni_syscall /* exit_group */ - + .quad sys_tkill + .quad sys_ni_syscall /* sendfile64 */ + .quad sys_futex + .quad sys32_sched_setaffinity + .quad sys32_sched_getaffinity + .quad sys_ni_syscall /* set_thread_area */ + .quad sys_ni_syscall /* get_thread_area */ + .quad sys32_io_setup + .quad sys_io_destroy + .quad sys_io_getevents + .quad sys_io_submit + .quad sys_io_cancel + ia32_syscall_end: .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8 .quad ni_syscall diff -urNp 2.4.20pre8aa2/arch/x86_64/ia32/sys_ia32.c ul-20021001/arch/x86_64/ia32/sys_ia32.c --- 2.4.20pre8aa2/arch/x86_64/ia32/sys_ia32.c Thu Sep 26 04:14:10 2002 +++ ul-20021001/arch/x86_64/ia32/sys_ia32.c Tue Oct 1 02:49:27 2002 @@ -15,7 +15,7 @@ * environment. In 2.5 most of this should be moved to a generic directory. * * This file assumes that there is a hole at the end of user address space. - * $Id: sys_ia32.c,v 1.42 2002/09/17 15:23:41 ak Exp $ + * $Id: sys_ia32.c,v 1.41 2002/09/12 12:55:05 ak Exp $ */ #include @@ -55,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -1326,7 +1327,7 @@ asmlinkage long sys32_fcntl64(unsigned i int ret = 0; int oldcmd = cmd; unsigned long oldarg = arg; - + switch (cmd) { case F_GETLK64: cmd = F_GETLK; @@ -2498,6 +2499,58 @@ int asmlinkage sys32_nfsservctl(int cmd, } #endif +extern long sys_io_setup(unsigned nr_reqs, aio_context_t *ctxp); + + + +int sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); +int sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); + +/* only works on LE */ +int sys32_sched_setaffinity(pid_t pid, unsigned int len, + unsigned int *new_mask_ptr) +{ + mm_segment_t oldfs = get_fs(); + unsigned long mask; + int err; + if (get_user(mask, new_mask_ptr)) + return -EFAULT; + set_fs(KERNEL_DS); + err = sys_sched_setaffinity(pid,sizeof(mask),&mask); + set_fs(oldfs); + return err; +} + +/* only works on LE */ +int sys32_sched_getaffinity(pid_t pid, unsigned int len, + unsigned int *new_mask_ptr) +{ + mm_segment_t oldfs = get_fs(); + unsigned long mask; + int err; + mask = 0; + set_fs(KERNEL_DS); + err = sys_sched_getaffinity(pid,sizeof(mask),&mask); + set_fs(oldfs); + if (!err) + err = put_user((u32)mask, new_mask_ptr); + return err; +} + +long sys32_io_setup(unsigned nr_reqs, u32 *ctx32p) +{ + long ret; + aio_context_t ctx64; + mm_segment_t oldfs = get_fs(); + set_fs(KERNEL_DS); + ret = sys_io_setup(nr_reqs, &ctx64); + set_fs(oldfs); + /* truncating is ok because it's a user address */ + if (!ret) + ret = put_user((u32)ctx64, ctx32p); + return ret; +} + int sys32_module_warning(void) { static long warn_time = -(60*HZ); @@ -2517,7 +2570,7 @@ struct exec_domain ia32_exec_domain = { static int __init ia32_init (void) { - printk("IA32 emulation $Id: sys_ia32.c,v 1.42 2002/09/17 15:23:41 ak Exp $\n"); + printk("IA32 emulation $Id: sys_ia32.c,v 1.41 2002/09/12 12:55:05 ak Exp $\n"); ia32_exec_domain.signal_map = default_exec_domain.signal_map; ia32_exec_domain.signal_invmap = default_exec_domain.signal_invmap; register_exec_domain(&ia32_exec_domain); diff -urNp 2.4.20pre8aa2/arch/x86_64/kernel/x8664_ksyms.c ul-20021001/arch/x86_64/kernel/x8664_ksyms.c --- 2.4.20pre8aa2/arch/x86_64/kernel/x8664_ksyms.c Tue Oct 1 04:08:48 2002 +++ ul-20021001/arch/x86_64/kernel/x8664_ksyms.c Tue Oct 1 02:49:27 2002 @@ -194,20 +194,11 @@ EXPORT_SYMBOL(copy_from_user); EXPORT_SYMBOL(copy_to_user); EXPORT_SYMBOL(copy_user_generic); -#if 0 /* Export kernel syscalls */ -EXPORT_SYMBOL(sys_wait4); -EXPORT_SYMBOL(sys_exit); -EXPORT_SYMBOL(sys_write); -EXPORT_SYMBOL(sys_read); -EXPORT_SYMBOL(sys_open); -EXPORT_SYMBOL(sys_lseek); -EXPORT_SYMBOL(sys_dup); EXPORT_SYMBOL(sys_delete_module); -EXPORT_SYMBOL(sys_sync); EXPORT_SYMBOL(sys_pause); -EXPORT_SYMBOL(sys_setsid); /* Rather dubious */ -#endif + +EXPORT_SYMBOL(cpu_khz); EXPORT_SYMBOL(memcpy_fromio); EXPORT_SYMBOL(memcpy_toio); diff -urNp 2.4.20pre8aa2/arch/x86_64/mm/fault.c ul-20021001/arch/x86_64/mm/fault.c --- 2.4.20pre8aa2/arch/x86_64/mm/fault.c Tue Oct 1 04:08:48 2002 +++ ul-20021001/arch/x86_64/mm/fault.c Tue Oct 1 02:49:19 2002 @@ -30,9 +30,6 @@ #include #include -spinlock_t pcrash_lock; -int crashing_cpu; - extern spinlock_t console_lock, timerlist_lock; void bust_spinlocks(int yes) @@ -103,7 +100,7 @@ asmlinkage void do_page_fault(struct pt_ { struct task_struct *tsk; struct mm_struct *mm; - struct vm_area_struct * vma, * prev_vma; + struct vm_area_struct * vma, *prev_vma; unsigned long address; unsigned long fixup; int write; @@ -112,12 +109,11 @@ asmlinkage void do_page_fault(struct pt_ /* get the address */ __asm__("movq %%cr2,%0":"=r" (address)); -#ifdef CONFIG_CHECKING if (page_fault_trace) - printk("pfault %d rip:%lx rsp:%lx cs:%lu ss:%lu addr %lx error %lx\n", - stack_smp_processor_id(), regs->rip,regs->rsp,regs->cs, - regs->ss,address,error_code); + printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n", + regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code); +#ifdef CONFIG_CHECKING { unsigned long gs; struct x8664_pda *pda = cpu_pda + stack_smp_processor_id(); @@ -129,6 +125,8 @@ asmlinkage void do_page_fault(struct pt_ } #endif + + tsk = current; mm = tsk->mm; info.si_code = SEGV_MAPERR; @@ -161,7 +159,7 @@ again: if (address + 128 < regs->rsp) goto bad_area; } - find_vma_prev(mm, address, &prev_vma); + find_vma_prev(current->mm, address, &prev_vma); if (expand_stack(vma, address, prev_vma)) goto bad_area; /* @@ -186,7 +184,6 @@ good_area: goto bad_area; } -survive: /* * If for any reason at all we couldn't handle the fault, * make sure we exit gracefully rather than endlessly redo @@ -219,14 +216,11 @@ bad_area_nosemaphore: /* User mode accesses just cause a SIGSEGV */ if (error_code & 4) { - if (exception_trace) { -#if 1 - dump_pagetable(address); -#endif + if (exception_trace) printk("%s[%d]: segfault at %016lx rip %016lx rsp %016lx error %lx\n", current->comm, current->pid, address, regs->rip, regs->rsp, error_code); - } + tsk->thread.cr2 = address; tsk->thread.error_code = error_code; tsk->thread.trap_no = 14; @@ -258,14 +252,6 @@ no_context: console_verbose(); bust_spinlocks(1); - if (!in_interrupt()) { - if (!spin_trylock(&pcrash_lock)) { - if (crashing_cpu != smp_processor_id()) - spin_lock(&pcrash_lock); - } - crashing_cpu = smp_processor_id(); - } - if (address < PAGE_SIZE) printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); else @@ -274,14 +260,7 @@ no_context: printk(" printing rip:\n"); printk("%016lx\n", regs->rip); dump_pagetable(address); - die("Oops", regs, error_code); - - if (!in_interrupt()) { - crashing_cpu = -1; /* small harmless window */ - spin_unlock(&pcrash_lock); - } - bust_spinlocks(0); do_exit(SIGKILL); @@ -292,8 +271,7 @@ no_context: out_of_memory: up_read(&mm->mmap_sem); if (current->pid == 1) { - tsk->policy |= SCHED_YIELD; - schedule(); + yield(); goto again; } printk("VM: killing process %s\n", tsk->comm); diff -urNp 2.4.20pre8aa2/arch/x86_64/mm/numa.c ul-20021001/arch/x86_64/mm/numa.c --- 2.4.20pre8aa2/arch/x86_64/mm/numa.c Thu Sep 26 04:14:10 2002 +++ ul-20021001/arch/x86_64/mm/numa.c Tue Oct 1 02:49:06 2002 @@ -73,6 +73,8 @@ void __init setup_node_bootmem(int nodei if (nodeid > maxnode) maxnode = nodeid; + if (nodeid+1 > numnodes) + numnodes = nodeid + 1; nodes_present |= (1UL << nodeid); }