aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/process_64.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-12-15 14:33:22 -0500
committerIngo Molnar <mingo@elte.hu>2009-12-15 14:33:28 -0500
commitab1eebe77dd08b26585860d534e07810d1cd274d (patch)
tree92b1ff0952cbdeef34922c43ff7eaac2162e77c4 /arch/x86/kernel/process_64.c
parent186a25026c44d1bfa97671110ff14dcd0c99678e (diff)
parentdf59e7bf439918f523ac29e996ec1eebbed60440 (diff)
Merge branch 'x86/asm' into x86/urgent
Merge reason: it's stable so lets push it upstream. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/process_64.c')
-rw-r--r--arch/x86/kernel/process_64.c35
1 files changed, 3 insertions, 32 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index e5ab0cd0ef3..52fbd0c6019 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -57,8 +57,6 @@ asmlinkage extern void ret_from_fork(void);
57DEFINE_PER_CPU(unsigned long, old_rsp); 57DEFINE_PER_CPU(unsigned long, old_rsp);
58static DEFINE_PER_CPU(unsigned char, is_idle); 58static DEFINE_PER_CPU(unsigned char, is_idle);
59 59
60unsigned long kernel_thread_flags = CLONE_VM | CLONE_UNTRACED;
61
62static ATOMIC_NOTIFIER_HEAD(idle_notifier); 60static ATOMIC_NOTIFIER_HEAD(idle_notifier);
63 61
64void idle_notifier_register(struct notifier_block *n) 62void idle_notifier_register(struct notifier_block *n)
@@ -273,8 +271,9 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
273 *childregs = *regs; 271 *childregs = *regs;
274 272
275 childregs->ax = 0; 273 childregs->ax = 0;
276 childregs->sp = sp; 274 if (user_mode(regs))
277 if (sp == ~0UL) 275 childregs->sp = sp;
276 else
278 childregs->sp = (unsigned long)childregs; 277 childregs->sp = (unsigned long)childregs;
279 278
280 p->thread.sp = (unsigned long) childregs; 279 p->thread.sp = (unsigned long) childregs;
@@ -508,25 +507,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
508 return prev_p; 507 return prev_p;
509} 508}
510 509
511/*
512 * sys_execve() executes a new program.
513 */
514asmlinkage
515long sys_execve(char __user *name, char __user * __user *argv,
516 char __user * __user *envp, struct pt_regs *regs)
517{
518 long error;
519 char *filename;
520
521 filename = getname(name);
522 error = PTR_ERR(filename);
523 if (IS_ERR(filename))
524 return error;
525 error = do_execve(filename, argv, envp, regs);
526 putname(filename);
527 return error;
528}
529
530void set_personality_64bit(void) 510void set_personality_64bit(void)
531{ 511{
532 /* inherit personality from parent */ 512 /* inherit personality from parent */
@@ -541,15 +521,6 @@ void set_personality_64bit(void)
541 current->personality &= ~READ_IMPLIES_EXEC; 521 current->personality &= ~READ_IMPLIES_EXEC;
542} 522}
543 523
544asmlinkage long
545sys_clone(unsigned long clone_flags, unsigned long newsp,
546 void __user *parent_tid, void __user *child_tid, struct pt_regs *regs)
547{
548 if (!newsp)
549 newsp = regs->sp;
550 return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid);
551}
552
553unsigned long get_wchan(struct task_struct *p) 524unsigned long get_wchan(struct task_struct *p)
554{ 525{
555 unsigned long stack; 526 unsigned long stack;