mirror of https://gitee.com/openkylin/linux.git
[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: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
469226a431
commit
1d3468a664
|
@ -6,11 +6,10 @@
|
|||
extra-y := vmlinux.lds
|
||||
clean-files :=
|
||||
|
||||
obj-y = config.o exec_kern.o exitcode.o \
|
||||
init_task.o irq.o ksyms.o mem.o physmem.o \
|
||||
process_kern.o ptrace.o reboot.o resource.o sigio_kern.o \
|
||||
signal_kern.o smp.o syscall_kern.o sysrq.o \
|
||||
time_kern.o tlb.o trap_kern.o uaccess.o um_arch.o umid.o
|
||||
obj-y = config.o exec.o exitcode.o init_task.o irq.o ksyms.o mem.o \
|
||||
physmem.o process_kern.o ptrace.o reboot.o resource.o sigio.o \
|
||||
signal.o smp.o syscall.o sysrq.o time.o tlb.o trap.o uaccess.o \
|
||||
um_arch.o umid.o
|
||||
|
||||
obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o
|
||||
obj-$(CONFIG_GPROF) += gprof_syms.o
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TTY_LOG
|
||||
extern void log_exec(char **argv, void *tty);
|
||||
#endif
|
||||
|
||||
static long execve1(char *file, char __user * __user *argv,
|
||||
char __user *__user *env)
|
||||
{
|
||||
long error;
|
||||
|
||||
#ifdef CONFIG_TTY_LOG
|
||||
log_exec(argv, current->tty);
|
||||
task_lock(current);
|
||||
log_exec(argv, current->signal->tty);
|
||||
task_unlock(current);
|
||||
#endif
|
||||
error = do_execve(file, argv, env, ¤t->thread.regs);
|
||||
if (error == 0){
|
||||
task_lock(current);
|
||||
current->ptrace &= ~PT_DTRACE;
|
||||
#ifdef SUBARCH_EXECVE1
|
||||
SUBARCH_EXECVE1(¤t->thread.regs.regs);
|
||||
#endif
|
||||
task_unlock(current);
|
||||
set_cmdline(current_cmd());
|
||||
}
|
|
@ -31,7 +31,7 @@ int write_sigio_irq(int fd)
|
|||
int err;
|
||||
|
||||
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);
|
||||
if(err){
|
||||
printk("write_sigio_irq : um_request_irq failed, err = %d\n",
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
@ -36,7 +36,7 @@ EXPORT_SYMBOL(unblock_signals);
|
|||
|
||||
/*
|
||||
* OK, we're invoking a handler
|
||||
*/
|
||||
*/
|
||||
static int handle_signal(struct pt_regs *regs, unsigned long signr,
|
||||
struct k_sigaction *ka, siginfo_t *info,
|
||||
sigset_t *oldset)
|
||||
|
@ -88,7 +88,7 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr,
|
|||
force_sigsegv(signr, current);
|
||||
} else {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked, ¤t->blocked,
|
||||
sigorsets(¤t->blocked, ¤t->blocked,
|
||||
&ka->sa.sa_mask);
|
||||
if(!(ka->sa.sa_flags & SA_NODEFER))
|
||||
sigaddset(¤t->blocked, signr);
|
||||
|
@ -136,7 +136,7 @@ static int kern_do_signal(struct pt_regs *regs)
|
|||
PT_REGS_RESTART_SYSCALL(regs);
|
||||
break;
|
||||
case -ERESTART_RESTARTBLOCK:
|
||||
PT_REGS_SYSCALL_RET(regs) = __NR_restart_syscall;
|
||||
PT_REGS_ORIG_SYSCALL(regs) = __NR_restart_syscall;
|
||||
PT_REGS_RESTART_SYSCALL(regs);
|
||||
break;
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ static int kern_do_signal(struct pt_regs *regs)
|
|||
* you set a breakpoint on a system call instruction and singlestep
|
||||
* from it, the tracing thread used to PTRACE_SINGLESTEP the process
|
||||
* 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.
|
||||
*/
|
||||
if(current->ptrace & PT_DTRACE)
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
@ -110,7 +110,7 @@ long sys_uname(struct old_utsname __user * name)
|
|||
if (!name)
|
||||
return -EFAULT;
|
||||
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);
|
||||
return err?-EFAULT:0;
|
||||
}
|
||||
|
@ -123,27 +123,27 @@ long sys_olduname(struct oldold_utsname __user * name)
|
|||
return -EFAULT;
|
||||
if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
|
||||
return -EFAULT;
|
||||
|
||||
|
||||
down_read(&uts_sem);
|
||||
|
||||
error = __copy_to_user(&name->sysname,&system_utsname.sysname,
|
||||
|
||||
error = __copy_to_user(&name->sysname, &utsname()->sysname,
|
||||
__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->nodename,&system_utsname.nodename,
|
||||
error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->nodename, &utsname()->nodename,
|
||||
__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->release,&system_utsname.release,
|
||||
error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->release, &utsname()->release,
|
||||
__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->release+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->version,&system_utsname.version,
|
||||
error |= __put_user(0, name->release + __OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->version, &utsname()->version,
|
||||
__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->version+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->machine,&system_utsname.machine,
|
||||
error |= __put_user(0, name->version + __OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->machine, &utsname()->machine,
|
||||
__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);
|
||||
|
||||
|
||||
error = error ? -EFAULT : 0;
|
||||
|
||||
return error;
|
|
@ -35,7 +35,7 @@
|
|||
#include "os.h"
|
||||
|
||||
/* 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)
|
||||
{
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
@ -55,20 +55,20 @@ int handle_page_fault(unsigned long address, unsigned long ip,
|
|||
|
||||
down_read(&mm->mmap_sem);
|
||||
vma = find_vma(mm, address);
|
||||
if(!vma)
|
||||
if(!vma)
|
||||
goto out;
|
||||
else if(vma->vm_start <= address)
|
||||
else if(vma->vm_start <= address)
|
||||
goto good_area;
|
||||
else if(!(vma->vm_flags & VM_GROWSDOWN))
|
||||
else if(!(vma->vm_flags & VM_GROWSDOWN))
|
||||
goto out;
|
||||
else if(is_user && !ARCH_IS_STACKGROW(address))
|
||||
goto out;
|
||||
else if(expand_stack(vma, address))
|
||||
else if(expand_stack(vma, address))
|
||||
goto out;
|
||||
|
||||
good_area:
|
||||
*code_out = SEGV_ACCERR;
|
||||
if(is_write && !(vma->vm_flags & VM_WRITE))
|
||||
if(is_write && !(vma->vm_flags & VM_WRITE))
|
||||
goto out;
|
||||
|
||||
/* 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)
|
|||
else if(catcher != NULL){
|
||||
current->thread.fault_addr = (void *) address;
|
||||
do_longjmp(catcher, 1);
|
||||
}
|
||||
}
|
||||
else if(current->thread.fault_addr != NULL)
|
||||
panic("fault_addr set but no fault catcher");
|
||||
else if(!is_user && arch_fixup(ip, sc))
|
||||
return(0);
|
||||
|
||||
if(!is_user)
|
||||
panic("Kernel mode fault at addr 0x%lx, ip 0x%lx",
|
||||
if(!is_user)
|
||||
panic("Kernel mode fault at addr 0x%lx, ip 0x%lx",
|
||||
address, ip);
|
||||
|
||||
if (err == -EACCES) {
|
Loading…
Reference in New Issue