Commit 1d3468a6 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

[PATCH] uml: move _kern.c files

Move most *_kern.c files in arch/um/kernel to *.c.  This makes UML somewhat
more closely resemble the other arches.

[akpm@osdl.org: use the new INTF_* flags]
Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 469226a4
...@@ -6,11 +6,10 @@ ...@@ -6,11 +6,10 @@
extra-y := vmlinux.lds extra-y := vmlinux.lds
clean-files := clean-files :=
obj-y = config.o exec_kern.o exitcode.o \ obj-y = config.o exec.o exitcode.o init_task.o irq.o ksyms.o mem.o \
init_task.o irq.o ksyms.o mem.o physmem.o \ physmem.o process_kern.o ptrace.o reboot.o resource.o sigio.o \
process_kern.o ptrace.o reboot.o resource.o sigio_kern.o \ signal.o smp.o syscall.o sysrq.o time.o tlb.o trap.o uaccess.o \
signal_kern.o smp.o syscall_kern.o sysrq.o \ um_arch.o umid.o
time_kern.o tlb.o trap_kern.o uaccess.o um_arch.o umid.o
obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o
obj-$(CONFIG_GPROF) += gprof_syms.o obj-$(CONFIG_GPROF) += gprof_syms.o
......
/* /*
* Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -31,18 +31,27 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) ...@@ -31,18 +31,27 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
CHOOSE_MODE_PROC(start_thread_tt, start_thread_skas, regs, eip, esp); CHOOSE_MODE_PROC(start_thread_tt, start_thread_skas, regs, eip, esp);
} }
#ifdef CONFIG_TTY_LOG
extern void log_exec(char **argv, void *tty);
#endif
static long execve1(char *file, char __user * __user *argv, static long execve1(char *file, char __user * __user *argv,
char __user *__user *env) char __user *__user *env)
{ {
long error; long error;
#ifdef CONFIG_TTY_LOG #ifdef CONFIG_TTY_LOG
log_exec(argv, current->tty); task_lock(current);
log_exec(argv, current->signal->tty);
task_unlock(current);
#endif #endif
error = do_execve(file, argv, env, &current->thread.regs); error = do_execve(file, argv, env, &current->thread.regs);
if (error == 0){ if (error == 0){
task_lock(current); task_lock(current);
current->ptrace &= ~PT_DTRACE; current->ptrace &= ~PT_DTRACE;
#ifdef SUBARCH_EXECVE1
SUBARCH_EXECVE1(&current->thread.regs.regs);
#endif
task_unlock(current); task_unlock(current);
set_cmdline(current_cmd()); set_cmdline(current_cmd());
} }
......
...@@ -31,7 +31,7 @@ int write_sigio_irq(int fd) ...@@ -31,7 +31,7 @@ int write_sigio_irq(int fd)
int err; int err;
err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt, err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt,
IRQF_DISABLED | IRQF_SAMPLE_RANDOM, "write sigio", IRQF_DISABLED|IRQF_SAMPLE_RANDOM, "write sigio",
NULL); NULL);
if(err){ if(err){
printk("write_sigio_irq : um_request_irq failed, err = %d\n", printk("write_sigio_irq : um_request_irq failed, err = %d\n",
......
/* /*
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -36,7 +36,7 @@ EXPORT_SYMBOL(unblock_signals); ...@@ -36,7 +36,7 @@ EXPORT_SYMBOL(unblock_signals);
/* /*
* OK, we're invoking a handler * OK, we're invoking a handler
*/ */
static int handle_signal(struct pt_regs *regs, unsigned long signr, static int handle_signal(struct pt_regs *regs, unsigned long signr,
struct k_sigaction *ka, siginfo_t *info, struct k_sigaction *ka, siginfo_t *info,
sigset_t *oldset) sigset_t *oldset)
...@@ -88,7 +88,7 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr, ...@@ -88,7 +88,7 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,
force_sigsegv(signr, current); force_sigsegv(signr, current);
} else { } else {
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
sigorsets(&current->blocked, &current->blocked, sigorsets(&current->blocked, &current->blocked,
&ka->sa.sa_mask); &ka->sa.sa_mask);
if(!(ka->sa.sa_flags & SA_NODEFER)) if(!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked, signr); sigaddset(&current->blocked, signr);
...@@ -136,7 +136,7 @@ static int kern_do_signal(struct pt_regs *regs) ...@@ -136,7 +136,7 @@ static int kern_do_signal(struct pt_regs *regs)
PT_REGS_RESTART_SYSCALL(regs); PT_REGS_RESTART_SYSCALL(regs);
break; break;
case -ERESTART_RESTARTBLOCK: case -ERESTART_RESTARTBLOCK:
PT_REGS_SYSCALL_RET(regs) = __NR_restart_syscall; PT_REGS_ORIG_SYSCALL(regs) = __NR_restart_syscall;
PT_REGS_RESTART_SYSCALL(regs); PT_REGS_RESTART_SYSCALL(regs);
break; break;
} }
...@@ -146,7 +146,7 @@ static int kern_do_signal(struct pt_regs *regs) ...@@ -146,7 +146,7 @@ static int kern_do_signal(struct pt_regs *regs)
* you set a breakpoint on a system call instruction and singlestep * you set a breakpoint on a system call instruction and singlestep
* from it, the tracing thread used to PTRACE_SINGLESTEP the process * from it, the tracing thread used to PTRACE_SINGLESTEP the process
* rather than PTRACE_SYSCALL it, allowing the system call to execute * rather than PTRACE_SYSCALL it, allowing the system call to execute
* on the host. The tracing thread will check this flag and * on the host. The tracing thread will check this flag and
* PTRACE_SYSCALL if necessary. * PTRACE_SYSCALL if necessary.
*/ */
if(current->ptrace & PT_DTRACE) if(current->ptrace & PT_DTRACE)
......
/* /*
* Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com) * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
* Licensed under the GPL * Licensed under the GPL
*/ */
...@@ -110,7 +110,7 @@ long sys_uname(struct old_utsname __user * name) ...@@ -110,7 +110,7 @@ long sys_uname(struct old_utsname __user * name)
if (!name) if (!name)
return -EFAULT; return -EFAULT;
down_read(&uts_sem); down_read(&uts_sem);
err=copy_to_user(name, &system_utsname, sizeof (*name)); err = copy_to_user(name, utsname(), sizeof (*name));
up_read(&uts_sem); up_read(&uts_sem);
return err?-EFAULT:0; return err?-EFAULT:0;
} }
...@@ -123,27 +123,27 @@ long sys_olduname(struct oldold_utsname __user * name) ...@@ -123,27 +123,27 @@ long sys_olduname(struct oldold_utsname __user * name)
return -EFAULT; return -EFAULT;
if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
return -EFAULT; return -EFAULT;
down_read(&uts_sem); down_read(&uts_sem);
error = __copy_to_user(&name->sysname,&system_utsname.sysname, error = __copy_to_user(&name->sysname, &utsname()->sysname,
__OLD_UTS_LEN); __OLD_UTS_LEN);
error |= __put_user(0,name->sysname+__OLD_UTS_LEN); error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
error |= __copy_to_user(&name->nodename,&system_utsname.nodename, error |= __copy_to_user(&name->nodename, &utsname()->nodename,
__OLD_UTS_LEN); __OLD_UTS_LEN);
error |= __put_user(0,name->nodename+__OLD_UTS_LEN); error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
error |= __copy_to_user(&name->release,&system_utsname.release, error |= __copy_to_user(&name->release, &utsname()->release,
__OLD_UTS_LEN); __OLD_UTS_LEN);
error |= __put_user(0,name->release+__OLD_UTS_LEN); error |= __put_user(0, name->release + __OLD_UTS_LEN);
error |= __copy_to_user(&name->version,&system_utsname.version, error |= __copy_to_user(&name->version, &utsname()->version,
__OLD_UTS_LEN); __OLD_UTS_LEN);
error |= __put_user(0,name->version+__OLD_UTS_LEN); error |= __put_user(0, name->version + __OLD_UTS_LEN);
error |= __copy_to_user(&name->machine,&system_utsname.machine, error |= __copy_to_user(&name->machine, &utsname()->machine,
__OLD_UTS_LEN); __OLD_UTS_LEN);
error |= __put_user(0,name->machine+__OLD_UTS_LEN); error |= __put_user(0, name->machine + __OLD_UTS_LEN);
up_read(&uts_sem); up_read(&uts_sem);
error = error ? -EFAULT : 0; error = error ? -EFAULT : 0;
return error; return error;
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
#include "os.h" #include "os.h"
/* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by segv(). */ /* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by segv(). */
int handle_page_fault(unsigned long address, unsigned long ip, int handle_page_fault(unsigned long address, unsigned long ip,
int is_write, int is_user, int *code_out) int is_write, int is_user, int *code_out)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
...@@ -55,20 +55,20 @@ int handle_page_fault(unsigned long address, unsigned long ip, ...@@ -55,20 +55,20 @@ int handle_page_fault(unsigned long address, unsigned long ip,
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
vma = find_vma(mm, address); vma = find_vma(mm, address);
if(!vma) if(!vma)
goto out; goto out;
else if(vma->vm_start <= address) else if(vma->vm_start <= address)
goto good_area; goto good_area;
else if(!(vma->vm_flags & VM_GROWSDOWN)) else if(!(vma->vm_flags & VM_GROWSDOWN))
goto out; goto out;
else if(is_user && !ARCH_IS_STACKGROW(address)) else if(is_user && !ARCH_IS_STACKGROW(address))
goto out; goto out;
else if(expand_stack(vma, address)) else if(expand_stack(vma, address))
goto out; goto out;
good_area: good_area:
*code_out = SEGV_ACCERR; *code_out = SEGV_ACCERR;
if(is_write && !(vma->vm_flags & VM_WRITE)) if(is_write && !(vma->vm_flags & VM_WRITE))
goto out; goto out;
/* Don't require VM_READ|VM_EXEC for write faults! */ /* Don't require VM_READ|VM_EXEC for write faults! */
...@@ -184,14 +184,14 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc) ...@@ -184,14 +184,14 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc)
else if(catcher != NULL){ else if(catcher != NULL){
current->thread.fault_addr = (void *) address; current->thread.fault_addr = (void *) address;
do_longjmp(catcher, 1); do_longjmp(catcher, 1);
} }
else if(current->thread.fault_addr != NULL) else if(current->thread.fault_addr != NULL)
panic("fault_addr set but no fault catcher"); panic("fault_addr set but no fault catcher");
else if(!is_user && arch_fixup(ip, sc)) else if(!is_user && arch_fixup(ip, sc))
return(0); return(0);
if(!is_user) if(!is_user)
panic("Kernel mode fault at addr 0x%lx, ip 0x%lx", panic("Kernel mode fault at addr 0x%lx, ip 0x%lx",
address, ip); address, ip);
if (err == -EACCES) { if (err == -EACCES) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment