Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 135595
b: refs/heads/master
c: cbdc229
h: refs/heads/master
i:
  135593: 70204cd
  135591: d369b4f
v: v3
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Mar 26, 2009
1 parent fd46b34 commit 127d064
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 082fb301e048e84669234afb80fe27e6fa87efb4
refs/heads/master: cbdc229245e8cf5c201e68221ebf2f33d2aaf029
64 changes: 27 additions & 37 deletions trunk/arch/s390/kernel/process.c
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
/*
* arch/s390/kernel/process.c
* This file handles the architecture dependent parts of process handling.
*
* S390 version
* Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
* Hartmut Penner (hp@de.ibm.com),
* Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
*
* Derived from "arch/i386/kernel/process.c"
* Copyright (C) 1995, Linus Torvalds
*/

/*
* This file handles the architecture-dependent parts of process handling..
* Copyright IBM Corp. 1999,2009
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
* Hartmut Penner <hp@de.ibm.com>,
* Denis Joseph Barrow,
*/

#include <linux/compiler.h>
Expand Down Expand Up @@ -168,34 +160,34 @@ void release_thread(struct task_struct *dead_task)
}

int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp,
unsigned long unused,
struct task_struct * p, struct pt_regs * regs)
unsigned long unused,
struct task_struct *p, struct pt_regs *regs)
{
struct fake_frame
{
struct stack_frame sf;
struct pt_regs childregs;
} *frame;

frame = container_of(task_pt_regs(p), struct fake_frame, childregs);
p->thread.ksp = (unsigned long) frame;
struct fake_frame
{
struct stack_frame sf;
struct pt_regs childregs;
} *frame;

frame = container_of(task_pt_regs(p), struct fake_frame, childregs);
p->thread.ksp = (unsigned long) frame;
/* Store access registers to kernel stack of new process. */
frame->childregs = *regs;
frame->childregs = *regs;
frame->childregs.gprs[2] = 0; /* child returns 0 on fork. */
frame->childregs.gprs[15] = new_stackp;
frame->sf.back_chain = 0;
frame->childregs.gprs[15] = new_stackp;
frame->sf.back_chain = 0;

/* new return point is ret_from_fork */
frame->sf.gprs[8] = (unsigned long) ret_from_fork;
/* new return point is ret_from_fork */
frame->sf.gprs[8] = (unsigned long) ret_from_fork;

/* fake return stack for resume(), don't go back to schedule */
frame->sf.gprs[9] = (unsigned long) frame;
/* fake return stack for resume(), don't go back to schedule */
frame->sf.gprs[9] = (unsigned long) frame;

/* Save access registers to new thread structure. */
save_access_regs(&p->thread.acrs[0]);

#ifndef CONFIG_64BIT
/*
/*
* save fprs to current->thread.fp_regs to merge them with
* the emulated registers and then copy the result to the child.
*/
Expand All @@ -220,10 +212,9 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp,
#endif /* CONFIG_64BIT */
/* start new process with ar4 pointing to the correct address space */
p->thread.mm_segment = get_fs();
/* Don't copy debug registers */
memset(&p->thread.per_info,0,sizeof(p->thread.per_info));

return 0;
/* Don't copy debug registers */
memset(&p->thread.per_info, 0, sizeof(p->thread.per_info));
return 0;
}

SYSCALL_DEFINE0(fork)
Expand Down Expand Up @@ -311,7 +302,7 @@ SYSCALL_DEFINE0(execve)
int dump_fpu (struct pt_regs * regs, s390_fp_regs *fpregs)
{
#ifndef CONFIG_64BIT
/*
/*
* save fprs to current->thread.fp_regs to merge them with
* the emulated registers and then copy the result to the dump.
*/
Expand Down Expand Up @@ -346,4 +337,3 @@ unsigned long get_wchan(struct task_struct *p)
}
return 0;
}

0 comments on commit 127d064

Please sign in to comment.