aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2007-05-06 17:51:21 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-07 15:13:02 -0400
commit6e21aec3fcf6c8862b755d45c0af45acdefff976 (patch)
tree1e2bcf6ae8ac4a6e62766cb1cddf073410d4ea5c /arch/um
parent65a58ab044308ae65ca06c50fb10be5e0e080989 (diff)
uml: tidy process.c
Clean up arch/um/kernel/process.c: - lots of return(x); -> return x; conversions - a number of the small functions are either unused, in which case they are gone, along any declarations in a header, or could be made static. - current_pid is ifdefed on CONFIG_MODE_TT and its declaration is ifdefed on both CONFIG_MODE_TT and UML_CONFIG_MODE_TT because we don't know whether it's being used in a userspace or kernel file. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/um')
-rw-r--r--arch/um/include/kern_util.h7
-rw-r--r--arch/um/include/tt/uaccess-tt.h2
-rw-r--r--arch/um/include/um_malloc.h1
-rw-r--r--arch/um/kernel/process.c118
4 files changed, 38 insertions, 90 deletions
diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h
index be850b9ec947..09810bc48e5b 100644
--- a/arch/um/include/kern_util.h
+++ b/arch/um/include/kern_util.h
@@ -8,6 +8,7 @@
8 8
9#include "sysdep/ptrace.h" 9#include "sysdep/ptrace.h"
10#include "sysdep/faultinfo.h" 10#include "sysdep/faultinfo.h"
11#include "uml-config.h"
11 12
12typedef void (*kern_hndl)(int, union uml_pt_regs *); 13typedef void (*kern_hndl)(int, union uml_pt_regs *);
13 14
@@ -33,7 +34,9 @@ extern int nsyscalls;
33 UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1) 34 UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1)
34 35
35extern int kernel_fork(unsigned long flags, int (*fn)(void *), void * arg); 36extern int kernel_fork(unsigned long flags, int (*fn)(void *), void * arg);
37#ifdef UML_CONFIG_MODE_TT
36extern unsigned long stack_sp(unsigned long page); 38extern unsigned long stack_sp(unsigned long page);
39#endif
37extern int kernel_thread_proc(void *data); 40extern int kernel_thread_proc(void *data);
38extern void syscall_segv(int sig); 41extern void syscall_segv(int sig);
39extern int current_pid(void); 42extern int current_pid(void);
@@ -57,7 +60,6 @@ extern void add_input_request(int op, void (*proc)(int), void *arg);
57extern char *current_cmd(void); 60extern char *current_cmd(void);
58extern void timer_handler(int sig, union uml_pt_regs *regs); 61extern void timer_handler(int sig, union uml_pt_regs *regs);
59extern int set_signals(int enable); 62extern int set_signals(int enable);
60extern void force_sigbus(void);
61extern int pid_to_processor_id(int pid); 63extern int pid_to_processor_id(int pid);
62extern void deliver_signals(void *t); 64extern void deliver_signals(void *t);
63extern int next_trap_index(int max); 65extern int next_trap_index(int max);
@@ -69,7 +71,6 @@ extern void *syscall_sp(void *t);
69extern void syscall_trace(union uml_pt_regs *regs, int entryexit); 71extern void syscall_trace(union uml_pt_regs *regs, int entryexit);
70extern int hz(void); 72extern int hz(void);
71extern unsigned int do_IRQ(int irq, union uml_pt_regs *regs); 73extern unsigned int do_IRQ(int irq, union uml_pt_regs *regs);
72extern int external_pid(void *t);
73extern void interrupt_end(void); 74extern void interrupt_end(void);
74extern void initial_thread_cb(void (*proc)(void *), void *arg); 75extern void initial_thread_cb(void (*proc)(void *), void *arg);
75extern int debugger_signal(int status, int pid); 76extern int debugger_signal(int status, int pid);
@@ -80,7 +81,6 @@ extern int init_parent_proxy(int pid);
80extern int singlestepping(void *t); 81extern int singlestepping(void *t);
81extern void check_stack_overflow(void *ptr); 82extern void check_stack_overflow(void *ptr);
82extern void relay_signal(int sig, union uml_pt_regs *regs); 83extern void relay_signal(int sig, union uml_pt_regs *regs);
83extern void not_implemented(void);
84extern int user_context(unsigned long sp); 84extern int user_context(unsigned long sp);
85extern void timer_irq(union uml_pt_regs *regs); 85extern void timer_irq(union uml_pt_regs *regs);
86extern void unprotect_stack(unsigned long stack); 86extern void unprotect_stack(unsigned long stack);
@@ -92,7 +92,6 @@ extern char *uml_strdup(char *string);
92extern void unprotect_kernel_mem(void); 92extern void unprotect_kernel_mem(void);
93extern void protect_kernel_mem(void); 93extern void protect_kernel_mem(void);
94extern void uml_cleanup(void); 94extern void uml_cleanup(void);
95extern void set_current(void *t);
96extern void lock_signalled_task(void *t); 95extern void lock_signalled_task(void *t);
97extern void IPI_handler(int cpu); 96extern void IPI_handler(int cpu);
98extern int jail_setup(char *line, int *add); 97extern int jail_setup(char *line, int *add);
diff --git a/arch/um/include/tt/uaccess-tt.h b/arch/um/include/tt/uaccess-tt.h
index b19645f32f24..13a64f61fcf4 100644
--- a/arch/um/include/tt/uaccess-tt.h
+++ b/arch/um/include/tt/uaccess-tt.h
@@ -27,8 +27,6 @@ extern unsigned long uml_physmem;
27#define access_ok_tt(type, addr, size) \ 27#define access_ok_tt(type, addr, size) \
28 (is_stack(addr, size)) 28 (is_stack(addr, size))
29 29
30extern unsigned long get_fault_addr(void);
31
32extern int __do_copy_from_user(void *to, const void *from, int n, 30extern int __do_copy_from_user(void *to, const void *from, int n,
33 void **fault_addr, void **fault_catcher); 31 void **fault_addr, void **fault_catcher);
34extern int __do_strncpy_from_user(char *dst, const char *src, size_t n, 32extern int __do_strncpy_from_user(char *dst, const char *src, size_t n,
diff --git a/arch/um/include/um_malloc.h b/arch/um/include/um_malloc.h
index 0363a9b53f8d..e6d7c5aa3f4e 100644
--- a/arch/um/include/um_malloc.h
+++ b/arch/um/include/um_malloc.h
@@ -11,7 +11,6 @@ extern void *um_kmalloc_atomic(int size);
11extern void kfree(const void *ptr); 11extern void kfree(const void *ptr);
12 12
13extern void *um_vmalloc(int size); 13extern void *um_vmalloc(int size);
14extern void *um_vmalloc_atomic(int size);
15extern void vfree(void *ptr); 14extern void vfree(void *ptr);
16 15
17#endif /* __UM_MALLOC_H__ */ 16#endif /* __UM_MALLOC_H__ */
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 90c9ffafc659..d6d3319b3670 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -54,11 +54,9 @@
54 */ 54 */
55struct cpu_task cpu_tasks[NR_CPUS] = { [0 ... NR_CPUS - 1] = { -1, NULL } }; 55struct cpu_task cpu_tasks[NR_CPUS] = { [0 ... NR_CPUS - 1] = { -1, NULL } };
56 56
57int external_pid(void *t) 57static inline int external_pid(struct task_struct *task)
58{ 58{
59 struct task_struct *task = t ? t : current; 59 return CHOOSE_MODE_PROC(external_pid_tt, external_pid_skas, task);
60
61 return(CHOOSE_MODE_PROC(external_pid_tt, external_pid_skas, task));
62} 60}
63 61
64int pid_to_processor_id(int pid) 62int pid_to_processor_id(int pid)
@@ -66,9 +64,10 @@ int pid_to_processor_id(int pid)
66 int i; 64 int i;
67 65
68 for(i = 0; i < ncpus; i++){ 66 for(i = 0; i < ncpus; i++){
69 if(cpu_tasks[i].pid == pid) return(i); 67 if(cpu_tasks[i].pid == pid)
68 return i;
70 } 69 }
71 return(-1); 70 return -1;
72} 71}
73 72
74void free_stack(unsigned long stack, int order) 73void free_stack(unsigned long stack, int order)
@@ -85,9 +84,9 @@ unsigned long alloc_stack(int order, int atomic)
85 flags = GFP_ATOMIC; 84 flags = GFP_ATOMIC;
86 page = __get_free_pages(flags, order); 85 page = __get_free_pages(flags, order);
87 if(page == 0) 86 if(page == 0)
88 return(0); 87 return 0;
89 stack_protections(page); 88 stack_protections(page);
90 return(page); 89 return page;
91} 90}
92 91
93int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) 92int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
@@ -100,13 +99,11 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
100 &current->thread.regs, 0, NULL, NULL); 99 &current->thread.regs, 0, NULL, NULL);
101 if(pid < 0) 100 if(pid < 0)
102 panic("do_fork failed in kernel_thread, errno = %d", pid); 101 panic("do_fork failed in kernel_thread, errno = %d", pid);
103 return(pid); 102 return pid;
104} 103}
105 104
106void set_current(void *t) 105static inline void set_current(struct task_struct *task)
107{ 106{
108 struct task_struct *task = t;
109
110 cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task) 107 cpu_tasks[task_thread_info(task)->cpu] = ((struct cpu_task)
111 { external_pid(task), task }); 108 { external_pid(task), task });
112} 109}
@@ -128,14 +125,16 @@ void *_switch_to(void *prev, void *next, void *last)
128 prev= current; 125 prev= current;
129 } while(current->thread.saved_task); 126 } while(current->thread.saved_task);
130 127
131 return(current->thread.prev_sched); 128 return current->thread.prev_sched;
132 129
133} 130}
134 131
135void interrupt_end(void) 132void interrupt_end(void)
136{ 133{
137 if(need_resched()) schedule(); 134 if(need_resched())
138 if(test_tsk_thread_flag(current, TIF_SIGPENDING)) do_signal(); 135 schedule();
136 if(test_tsk_thread_flag(current, TIF_SIGPENDING))
137 do_signal();
139} 138}
140 139
141void release_thread(struct task_struct *task) 140void release_thread(struct task_struct *task)
@@ -150,7 +149,7 @@ void exit_thread(void)
150 149
151void *get_current(void) 150void *get_current(void)
152{ 151{
153 return(current); 152 return current;
154} 153}
155 154
156int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, 155int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
@@ -188,15 +187,12 @@ void initial_thread_cb(void (*proc)(void *), void *arg)
188 kmalloc_ok = save_kmalloc_ok; 187 kmalloc_ok = save_kmalloc_ok;
189} 188}
190 189
190#ifdef CONFIG_MODE_TT
191unsigned long stack_sp(unsigned long page) 191unsigned long stack_sp(unsigned long page)
192{ 192{
193 return(page + PAGE_SIZE - sizeof(void *)); 193 return page + PAGE_SIZE - sizeof(void *);
194}
195
196int current_pid(void)
197{
198 return(current->pid);
199} 194}
195#endif
200 196
201void default_idle(void) 197void default_idle(void)
202{ 198{
@@ -223,7 +219,7 @@ void cpu_idle(void)
223 219
224int page_size(void) 220int page_size(void)
225{ 221{
226 return(PAGE_SIZE); 222 return PAGE_SIZE;
227} 223}
228 224
229void *um_virt_to_phys(struct task_struct *task, unsigned long addr, 225void *um_virt_to_phys(struct task_struct *task, unsigned long addr,
@@ -236,68 +232,43 @@ void *um_virt_to_phys(struct task_struct *task, unsigned long addr,
236 pte_t ptent; 232 pte_t ptent;
237 233
238 if(task->mm == NULL) 234 if(task->mm == NULL)
239 return(ERR_PTR(-EINVAL)); 235 return ERR_PTR(-EINVAL);
240 pgd = pgd_offset(task->mm, addr); 236 pgd = pgd_offset(task->mm, addr);
241 if(!pgd_present(*pgd)) 237 if(!pgd_present(*pgd))
242 return(ERR_PTR(-EINVAL)); 238 return ERR_PTR(-EINVAL);
243 239
244 pud = pud_offset(pgd, addr); 240 pud = pud_offset(pgd, addr);
245 if(!pud_present(*pud)) 241 if(!pud_present(*pud))
246 return(ERR_PTR(-EINVAL)); 242 return ERR_PTR(-EINVAL);
247 243
248 pmd = pmd_offset(pud, addr); 244 pmd = pmd_offset(pud, addr);
249 if(!pmd_present(*pmd)) 245 if(!pmd_present(*pmd))
250 return(ERR_PTR(-EINVAL)); 246 return ERR_PTR(-EINVAL);
251 247
252 pte = pte_offset_kernel(pmd, addr); 248 pte = pte_offset_kernel(pmd, addr);
253 ptent = *pte; 249 ptent = *pte;
254 if(!pte_present(ptent)) 250 if(!pte_present(ptent))
255 return(ERR_PTR(-EINVAL)); 251 return ERR_PTR(-EINVAL);
256 252
257 if(pte_out != NULL) 253 if(pte_out != NULL)
258 *pte_out = ptent; 254 *pte_out = ptent;
259 return((void *) (pte_val(ptent) & PAGE_MASK) + (addr & ~PAGE_MASK)); 255 return (void *) (pte_val(ptent) & PAGE_MASK) + (addr & ~PAGE_MASK);
260} 256}
261 257
262char *current_cmd(void) 258char *current_cmd(void)
263{ 259{
264#if defined(CONFIG_SMP) || defined(CONFIG_HIGHMEM) 260#if defined(CONFIG_SMP) || defined(CONFIG_HIGHMEM)
265 return("(Unknown)"); 261 return "(Unknown)";
266#else 262#else
267 void *addr = um_virt_to_phys(current, current->mm->arg_start, NULL); 263 void *addr = um_virt_to_phys(current, current->mm->arg_start, NULL);
268 return IS_ERR(addr) ? "(Unknown)": __va((unsigned long) addr); 264 return IS_ERR(addr) ? "(Unknown)": __va((unsigned long) addr);
269#endif 265#endif
270} 266}
271 267
272void force_sigbus(void)
273{
274 printk(KERN_ERR "Killing pid %d because of a lack of memory\n",
275 current->pid);
276 lock_kernel();
277 sigaddset(&current->pending.signal, SIGBUS);
278 recalc_sigpending();
279 current->flags |= PF_SIGNALED;
280 do_exit(SIGBUS | 0x80);
281}
282
283void dump_thread(struct pt_regs *regs, struct user *u) 268void dump_thread(struct pt_regs *regs, struct user *u)
284{ 269{
285} 270}
286 271
287void enable_hlt(void)
288{
289 panic("enable_hlt");
290}
291
292EXPORT_SYMBOL(enable_hlt);
293
294void disable_hlt(void)
295{
296 panic("disable_hlt");
297}
298
299EXPORT_SYMBOL(disable_hlt);
300
301void *um_kmalloc(int size) 272void *um_kmalloc(int size)
302{ 273{
303 return kmalloc(size, GFP_KERNEL); 274 return kmalloc(size, GFP_KERNEL);
@@ -313,36 +284,17 @@ void *um_vmalloc(int size)
313 return vmalloc(size); 284 return vmalloc(size);
314} 285}
315 286
316void *um_vmalloc_atomic(int size)
317{
318 return __vmalloc(size, GFP_ATOMIC | __GFP_HIGHMEM, PAGE_KERNEL);
319}
320
321int __cant_sleep(void) { 287int __cant_sleep(void) {
322 return in_atomic() || irqs_disabled() || in_interrupt(); 288 return in_atomic() || irqs_disabled() || in_interrupt();
323 /* Is in_interrupt() really needed? */ 289 /* Is in_interrupt() really needed? */
324} 290}
325 291
326unsigned long get_fault_addr(void)
327{
328 return((unsigned long) current->thread.fault_addr);
329}
330
331EXPORT_SYMBOL(get_fault_addr);
332
333void not_implemented(void)
334{
335 printk(KERN_DEBUG "Something isn't implemented in here\n");
336}
337
338EXPORT_SYMBOL(not_implemented);
339
340int user_context(unsigned long sp) 292int user_context(unsigned long sp)
341{ 293{
342 unsigned long stack; 294 unsigned long stack;
343 295
344 stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER); 296 stack = sp & (PAGE_MASK << CONFIG_KERNEL_STACK_ORDER);
345 return(stack != (unsigned long) current_thread); 297 return stack != (unsigned long) current_thread;
346} 298}
347 299
348extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end; 300extern exitcall_t __uml_exitcall_begin, __uml_exitcall_end;
@@ -363,22 +315,22 @@ char *uml_strdup(char *string)
363 315
364int copy_to_user_proc(void __user *to, void *from, int size) 316int copy_to_user_proc(void __user *to, void *from, int size)
365{ 317{
366 return(copy_to_user(to, from, size)); 318 return copy_to_user(to, from, size);
367} 319}
368 320
369int copy_from_user_proc(void *to, void __user *from, int size) 321int copy_from_user_proc(void *to, void __user *from, int size)
370{ 322{
371 return(copy_from_user(to, from, size)); 323 return copy_from_user(to, from, size);
372} 324}
373 325
374int clear_user_proc(void __user *buf, int size) 326int clear_user_proc(void __user *buf, int size)
375{ 327{
376 return(clear_user(buf, size)); 328 return clear_user(buf, size);
377} 329}
378 330
379int strlen_user_proc(char __user *str) 331int strlen_user_proc(char __user *str)
380{ 332{
381 return(strlen_user(str)); 333 return strlen_user(str);
382} 334}
383 335
384int smp_sigio_handler(void) 336int smp_sigio_handler(void)
@@ -387,14 +339,14 @@ int smp_sigio_handler(void)
387 int cpu = current_thread->cpu; 339 int cpu = current_thread->cpu;
388 IPI_handler(cpu); 340 IPI_handler(cpu);
389 if(cpu != 0) 341 if(cpu != 0)
390 return(1); 342 return 1;
391#endif 343#endif
392 return(0); 344 return 0;
393} 345}
394 346
395int cpu(void) 347int cpu(void)
396{ 348{
397 return(current_thread->cpu); 349 return current_thread->cpu;
398} 350}
399 351
400static atomic_t using_sysemu = ATOMIC_INIT(0); 352static atomic_t using_sysemu = ATOMIC_INIT(0);
@@ -443,7 +395,7 @@ int __init make_proc_sysemu(void)
443 if (ent == NULL) 395 if (ent == NULL)
444 { 396 {
445 printk(KERN_WARNING "Failed to register /proc/sysemu\n"); 397 printk(KERN_WARNING "Failed to register /proc/sysemu\n");
446 return(0); 398 return 0;
447 } 399 }
448 400
449 ent->read_proc = proc_read_sysemu; 401 ent->read_proc = proc_read_sysemu;