aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/kernel
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-09-09 02:49:04 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-09 02:49:04 -0400
commite199e6136ce6b151e6638ae93dca60748424d900 (patch)
tree0d66e0b5d227c36b005e4f5537f4bbcfc6ed4904 /arch/um/kernel
parent972c40b5bee429c84ba727f8ac0a08292bc5dc3d (diff)
parentd56557af19867edb8c0e96f8e26399698a08857f (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/um/kernel')
-rw-r--r--arch/um/kernel/exec.c9
-rw-r--r--arch/um/kernel/internal.h2
-rw-r--r--arch/um/kernel/ksyms.c3
-rw-r--r--arch/um/kernel/ptrace.c21
-rw-r--r--arch/um/kernel/syscall.c6
-rw-r--r--arch/um/kernel/time.c16
6 files changed, 21 insertions, 36 deletions
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c
index 97974c1bdd12..cd145eda3579 100644
--- a/arch/um/kernel/exec.c
+++ b/arch/um/kernel/exec.c
@@ -44,8 +44,9 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
44 PT_REGS_SP(regs) = esp; 44 PT_REGS_SP(regs) = esp;
45} 45}
46 46
47static long execve1(char *file, char __user * __user *argv, 47static long execve1(const char *file,
48 char __user *__user *env) 48 const char __user *const __user *argv,
49 const char __user *const __user *env)
49{ 50{
50 long error; 51 long error;
51 52
@@ -61,7 +62,7 @@ static long execve1(char *file, char __user * __user *argv,
61 return error; 62 return error;
62} 63}
63 64
64long um_execve(char *file, char __user *__user *argv, char __user *__user *env) 65long um_execve(const char *file, char __user *__user *argv, char __user *__user *env)
65{ 66{
66 long err; 67 long err;
67 68
@@ -71,7 +72,7 @@ long um_execve(char *file, char __user *__user *argv, char __user *__user *env)
71 return err; 72 return err;
72} 73}
73 74
74long sys_execve(char __user *file, char __user *__user *argv, 75long sys_execve(const char __user *file, char __user *__user *argv,
75 char __user *__user *env) 76 char __user *__user *env)
76{ 77{
77 long error; 78 long error;
diff --git a/arch/um/kernel/internal.h b/arch/um/kernel/internal.h
index 3bda43c7a786..1303a105fe91 100644
--- a/arch/um/kernel/internal.h
+++ b/arch/um/kernel/internal.h
@@ -1 +1 @@
extern long um_execve(char *file, char __user *__user *argv, char __user *__user *env); extern long um_execve(const char *file, char __user *__user *argv, char __user *__user *env);
diff --git a/arch/um/kernel/ksyms.c b/arch/um/kernel/ksyms.c
index 836fc9b94707..0ae0dfcfbffb 100644
--- a/arch/um/kernel/ksyms.c
+++ b/arch/um/kernel/ksyms.c
@@ -58,6 +58,9 @@ EXPORT_SYMBOL(os_accept_connection);
58EXPORT_SYMBOL(os_rcv_fd); 58EXPORT_SYMBOL(os_rcv_fd);
59EXPORT_SYMBOL(run_helper); 59EXPORT_SYMBOL(run_helper);
60EXPORT_SYMBOL(start_thread); 60EXPORT_SYMBOL(start_thread);
61EXPORT_SYMBOL(os_major);
62EXPORT_SYMBOL(os_minor);
63EXPORT_SYMBOL(os_makedev);
61 64
62EXPORT_SYMBOL(add_sigio_fd); 65EXPORT_SYMBOL(add_sigio_fd);
63EXPORT_SYMBOL(ignore_sigio_fd); 66EXPORT_SYMBOL(ignore_sigio_fd);
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c
index 484509948ee9..e0510496596c 100644
--- a/arch/um/kernel/ptrace.c
+++ b/arch/um/kernel/ptrace.c
@@ -7,9 +7,6 @@
7#include "linux/ptrace.h" 7#include "linux/ptrace.h"
8#include "linux/sched.h" 8#include "linux/sched.h"
9#include "asm/uaccess.h" 9#include "asm/uaccess.h"
10#ifdef CONFIG_PROC_MM
11#include "proc_mm.h"
12#endif
13#include "skas_ptrace.h" 10#include "skas_ptrace.h"
14 11
15 12
@@ -158,24 +155,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
158 break; 155 break;
159 } 156 }
160#endif 157#endif
161#ifdef CONFIG_PROC_MM
162 case PTRACE_SWITCH_MM: {
163 struct mm_struct *old = child->mm;
164 struct mm_struct *new = proc_mm_get_mm(data);
165
166 if (IS_ERR(new)) {
167 ret = PTR_ERR(new);
168 break;
169 }
170
171 atomic_inc(&new->mm_users);
172 child->mm = new;
173 child->active_mm = new;
174 mmput(old);
175 ret = 0;
176 break;
177 }
178#endif
179#ifdef PTRACE_ARCH_PRCTL 158#ifdef PTRACE_ARCH_PRCTL
180 case PTRACE_ARCH_PRCTL: 159 case PTRACE_ARCH_PRCTL:
181 /* XXX Calls ptrace on the host - needs some SMP thinking */ 160 /* XXX Calls ptrace on the host - needs some SMP thinking */
diff --git a/arch/um/kernel/syscall.c b/arch/um/kernel/syscall.c
index 4393173923f5..5ddb246626db 100644
--- a/arch/um/kernel/syscall.c
+++ b/arch/um/kernel/syscall.c
@@ -51,14 +51,16 @@ long old_mmap(unsigned long addr, unsigned long len,
51 return err; 51 return err;
52} 52}
53 53
54int kernel_execve(const char *filename, char *const argv[], char *const envp[]) 54int kernel_execve(const char *filename,
55 const char *const argv[],
56 const char *const envp[])
55{ 57{
56 mm_segment_t fs; 58 mm_segment_t fs;
57 int ret; 59 int ret;
58 60
59 fs = get_fs(); 61 fs = get_fs();
60 set_fs(KERNEL_DS); 62 set_fs(KERNEL_DS);
61 ret = um_execve((char *)filename, (char __user *__user *)argv, 63 ret = um_execve(filename, (char __user *__user *)argv,
62 (char __user *__user *) envp); 64 (char __user *__user *) envp);
63 set_fs(fs); 65 set_fs(fs);
64 66
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c
index c8b9c469fcd7..a08d9fab81f2 100644
--- a/arch/um/kernel/time.c
+++ b/arch/um/kernel/time.c
@@ -102,16 +102,16 @@ static void __init setup_itimer(void)
102 clockevents_register_device(&itimer_clockevent); 102 clockevents_register_device(&itimer_clockevent);
103} 103}
104 104
105void __init time_init(void) 105void read_persistent_clock(struct timespec *ts)
106{ 106{
107 long long nsecs; 107 long long nsecs = os_nsecs();
108
109 timer_init();
110 108
111 nsecs = os_nsecs(); 109 set_normalized_timespec(ts, nsecs / NSEC_PER_SEC,
112 set_normalized_timespec(&wall_to_monotonic, -nsecs / NSEC_PER_SEC,
113 -nsecs % NSEC_PER_SEC);
114 set_normalized_timespec(&xtime, nsecs / NSEC_PER_SEC,
115 nsecs % NSEC_PER_SEC); 110 nsecs % NSEC_PER_SEC);
111}
112
113void __init time_init(void)
114{
115 timer_init();
116 late_time_init = setup_itimer; 116 late_time_init = setup_itimer;
117} 117}