From d6d05310c819d39ce14819a938a07109ad5c0c51 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Mon, 18 Nov 2002 05:57:00 -0500 Subject: Updated to 2.5.48 --- include/asm-um/uaccess.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/asm-um/uaccess.h b/include/asm-um/uaccess.h index a8a7dfb7e4c8..0a24a9b5497f 100644 --- a/include/asm-um/uaccess.h +++ b/include/asm-um/uaccess.h @@ -164,7 +164,7 @@ static inline int clear_user(void *mem, int len) extern int __do_strnlen_user(const char *str, unsigned long n, void **fault_addr, void **fault_catcher); -static inline int strnlen_user(void *str, int len) +static inline int strnlen_user(const void *str, int len) { return(__do_strnlen_user(str, len, ¤t->thread.fault_addr, -- cgit v1.2.3 From d3f34f89e958a8ca6cce54d5ba76a7c6b40b6d39 Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Fri, 6 Dec 2002 11:23:55 -0500 Subject: Updated to 2.5.50. --- arch/um/kernel/ptrace.c | 3 +-- arch/um/kernel/sys_call_table.c | 1 + include/asm-um/pgtable.h | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index d6dacf475c33..8b5739a84ed3 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c @@ -33,8 +33,7 @@ int sys_ptrace(long request, long pid, long addr, long data) if (current->ptrace & PT_PTRACED) goto out; - ret = security_ptrace(current->parent, current); - if (ret) + if((ret = security_ptrace(current->parent, current))) goto out; /* set the ptrace bit in the process flags. */ diff --git a/arch/um/kernel/sys_call_table.c b/arch/um/kernel/sys_call_table.c index 9418e8e329f6..14b4e4c066b6 100644 --- a/arch/um/kernel/sys_call_table.c +++ b/arch/um/kernel/sys_call_table.c @@ -8,6 +8,7 @@ #include "linux/version.h" #include "linux/sys.h" #include "linux/swap.h" +#include "linux/sysctl.h" #include "asm/signal.h" #include "sysdep/syscalls.h" #include "kern_util.h" diff --git a/include/asm-um/pgtable.h b/include/asm-um/pgtable.h index a79a756c3989..8d607c87418d 100644 --- a/include/asm-um/pgtable.h +++ b/include/asm-um/pgtable.h @@ -373,15 +373,15 @@ static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) } /* Find an entry in the third-level page table.. */ -#define __pte_offset(address) ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) +#define __pte_offset(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) #define pte_offset_kernel(dir, address) \ ((pte_t *) pmd_page_kernel(*(dir)) + __pte_offset(address)) #define pte_offset_map(dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + __pte_offset(address)) #define pte_offset_map_nested(dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE1) + __pte_offset(address)) -#define pte_unmap(pte) kunmap_atomic(pte, KM_PTE0) -#define pte_unmap_nested(pte) kunmap_atomic(pte, KM_PTE1) +#define pte_unmap(pte) kunmap_atomic((pte), KM_PTE0) +#define pte_unmap_nested(pte) kunmap_atomic((pte), KM_PTE1) #if defined(CONFIG_HIGHPTE) && defined(CONFIG_HIGHMEM4G) typedef u32 pte_addr_t; -- cgit v1.2.3 From 2e7fa3fb6089f4c7f847d919cb9806f86836bc7f Mon Sep 17 00:00:00 2001 From: Jeff Dike Date: Mon, 16 Dec 2002 14:44:15 -0500 Subject: Applied updates from 2.5.51 and 2.5.52. --- arch/um/kernel/ptrace.c | 3 ++- arch/um/kernel/signal_kern.c | 7 +++++++ arch/um/kernel/sys_call_table.c | 2 +- arch/um/kernel/syscall_kern.c | 6 +++++- arch/um/uml.lds.S | 11 ++++++++++- include/asm-um/thread_info.h | 10 ++++------ 6 files changed, 29 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 8b5739a84ed3..d6dacf475c33 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c @@ -33,7 +33,8 @@ int sys_ptrace(long request, long pid, long addr, long data) if (current->ptrace & PT_PTRACED) goto out; - if((ret = security_ptrace(current->parent, current))) + ret = security_ptrace(current->parent, current); + if (ret) goto out; /* set the ptrace bit in the process flags. */ diff --git a/arch/um/kernel/signal_kern.c b/arch/um/kernel/signal_kern.c index be60440cf012..87768b9661aa 100644 --- a/arch/um/kernel/signal_kern.c +++ b/arch/um/kernel/signal_kern.c @@ -69,6 +69,9 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr, ret = 0; switch(error){ + case -ERESTART_RESTARTBLOCK: + current_thread_info()->restart_block.fn = + do_no_restart_syscall; case -ERESTARTNOHAND: ret = -EINTR; break; @@ -160,6 +163,10 @@ static int kern_do_signal(struct pt_regs *regs, sigset_t *oldset, int error) PT_REGS_ORIG_SYSCALL(regs) = PT_REGS_SYSCALL_NR(regs); PT_REGS_RESTART_SYSCALL(regs); } + else if(PT_REGS_SYSCALL_RET(regs) == -ERESTART_RESTARTBLOCK){ + PT_REGS_SYSCALL_RET(regs) = __NR_restart_syscall; + PT_REGS_RESTART_SYSCALL(regs); + } } /* This closes a way to execute a system call on the host. If diff --git a/arch/um/kernel/sys_call_table.c b/arch/um/kernel/sys_call_table.c index 7b5a703a24c7..9a329a4938ab 100644 --- a/arch/um/kernel/sys_call_table.c +++ b/arch/um/kernel/sys_call_table.c @@ -254,7 +254,7 @@ extern syscall_handler_t um_stime; #endif syscall_handler_t *sys_call_table[] = { - [ 0 ] = sys_ni_syscall, + [ __NR_restart_syscall ] = sys_restart_syscall, [ __NR_exit ] = sys_exit, [ __NR_fork ] = sys_fork, [ __NR_read ] = (syscall_handler_t *) sys_read, diff --git a/arch/um/kernel/syscall_kern.c b/arch/um/kernel/syscall_kern.c index ab42524562b1..1cf0ed074e2a 100644 --- a/arch/um/kernel/syscall_kern.c +++ b/arch/um/kernel/syscall_kern.c @@ -182,7 +182,11 @@ int sys_ipc (uint call, int first, int second, switch (call) { case SEMOP: - return sys_semop (first, (struct sembuf *)ptr, second); + return sys_semtimedop(first, (struct sembuf *) ptr, second, + NULL); + case SEMTIMEDOP: + return sys_semtimedop(first, (struct sembuf *) ptr, second, + (const struct timespec *) fifth); case SEMGET: return sys_semget (first, second, third); case SEMCTL: { diff --git a/arch/um/uml.lds.S b/arch/um/uml.lds.S index cd4b487e0fa5..736df4695129 100644 --- a/arch/um/uml.lds.S +++ b/arch/um/uml.lds.S @@ -59,18 +59,27 @@ SECTIONS __uml_setup_start = .; .uml.setup.init : { *(.uml.setup.init) } __uml_setup_end = .; + __uml_help_start = .; .uml.help.init : { *(.uml.help.init) } __uml_help_end = .; + __uml_postsetup_start = .; .uml.postsetup.init : { *(.uml.postsetup.init) } __uml_postsetup_end = .; + __setup_start = .; .init.setup : { *(.init.setup) } __setup_end = .; + + __start___param = .; + __param : { *(__param) } + __stop___param = .; + __per_cpu_start = . ; .data.percpu : { *(.data.percpu) } - __per_cpu_end = . ; + __per_cpu_end = . ; + __initcall_start = .; .initcall.init : { *(.initcall1.init) diff --git a/include/asm-um/thread_info.h b/include/asm-um/thread_info.h index 1cb0f45359f5..bd3f4fe40c6b 100644 --- a/include/asm-um/thread_info.h +++ b/include/asm-um/thread_info.h @@ -20,14 +20,9 @@ struct thread_info { mm_segment_t addr_limit; /* thread address space: 0-0xBFFFFFFF for user 0-0xFFFFFFFF for kernel */ + struct restart_block restart_block; }; -/* - * macros/functions for gaining access to the thread information structure - * - * preempt_count needs to be 1 initially, until the scheduler is functional. - */ - #define INIT_THREAD_INFO(tsk) \ { \ task: &tsk, \ @@ -36,6 +31,9 @@ struct thread_info { cpu: 0, \ preempt_count: 1, \ addr_limit: KERNEL_DS, \ + restart_block: { \ + fn: do_no_restart_syscall, \ + }, \ } #define init_thread_info (init_thread_union.thread_info) -- cgit v1.2.3