diff options
| author | Steve French <sfrench@us.ibm.com> | 2005-12-31 13:27:22 -0500 |
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2005-12-31 13:27:22 -0500 |
| commit | eea60caef610c7a6c58c0de9c80ae1e438e01301 (patch) | |
| tree | 25e19289bba003fe085e589430d0d981fd6b73a7 /arch/um/kernel | |
| parent | da8543ef125afc7bba4da526b61a1ae07dc25109 (diff) | |
| parent | 82c9df820112c6286a8e8fbe482e94b65b49062c (diff) | |
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'arch/um/kernel')
| -rw-r--r-- | arch/um/kernel/skas/clone.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c index cb37ce9124a6..47b812b3bca8 100644 --- a/arch/um/kernel/skas/clone.c +++ b/arch/um/kernel/skas/clone.c | |||
| @@ -18,11 +18,10 @@ | |||
| 18 | * on some systems. | 18 | * on some systems. |
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | #define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field) | ||
| 22 | |||
| 23 | void __attribute__ ((__section__ (".__syscall_stub"))) | 21 | void __attribute__ ((__section__ (".__syscall_stub"))) |
| 24 | stub_clone_handler(void) | 22 | stub_clone_handler(void) |
| 25 | { | 23 | { |
| 24 | struct stub_data *data = (struct stub_data *) UML_CONFIG_STUB_DATA; | ||
| 26 | long err; | 25 | long err; |
| 27 | 26 | ||
| 28 | err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, | 27 | err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, |
| @@ -35,17 +34,21 @@ stub_clone_handler(void) | |||
| 35 | if(err) | 34 | if(err) |
| 36 | goto out; | 35 | goto out; |
| 37 | 36 | ||
| 38 | err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, | 37 | err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, |
| 39 | (long) &STUB_DATA(timer), 0); | 38 | (long) &data->timer, 0); |
| 40 | if(err) | 39 | if(err) |
| 41 | goto out; | 40 | goto out; |
| 42 | 41 | ||
| 43 | err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, | 42 | remap_stack(data->fd, data->offset); |
| 44 | UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE, | 43 | goto done; |
| 45 | MAP_FIXED | MAP_SHARED, STUB_DATA(fd), | 44 | |
| 46 | STUB_DATA(offset)); | ||
| 47 | out: | 45 | out: |
| 48 | /* save current result. Parent: pid; child: retcode of mmap */ | 46 | /* save current result. |
| 49 | STUB_DATA(err) = err; | 47 | * Parent: pid; |
| 48 | * child: retcode of mmap already saved and it jumps around this | ||
| 49 | * assignment | ||
| 50 | */ | ||
| 51 | data->err = err; | ||
| 52 | done: | ||
| 50 | trap_myself(); | 53 | trap_myself(); |
| 51 | } | 54 | } |
