aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/kernel/skas/clone.c
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2005-11-22 00:32:10 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-22 12:13:41 -0500
commitaa1a64ee12ae130706f3fc0007841ce9b0ddf9c2 (patch)
treeaa4dcbb8d1870209ae69dc85f241b8c1592ee4c1 /arch/um/kernel/skas/clone.c
parent17d469715c6453e4994e6617e8f644bf10f38584 (diff)
[PATCH] uml: eliminate use of libc PAGE_SIZE
On some systems, libc PAGE_SIZE calls getpagesize, which can't happen from a stub. So, I use UM_KERN_PAGE_SIZE, which is less variable in its definition, instead. Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/kernel/skas/clone.c')
-rw-r--r--arch/um/kernel/skas/clone.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c
index 39c0d7145d31..cb37ce9124a6 100644
--- a/arch/um/kernel/skas/clone.c
+++ b/arch/um/kernel/skas/clone.c
@@ -9,9 +9,13 @@
9#include "stub-data.h" 9#include "stub-data.h"
10#include "uml-config.h" 10#include "uml-config.h"
11#include "sysdep/stub.h" 11#include "sysdep/stub.h"
12#include "kern_constants.h"
12 13
13/* This is in a separate file because it needs to be compiled with any 14/* This is in a separate file because it needs to be compiled with any
14 * extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled 15 * extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled
16 *
17 * Use UM_KERN_PAGE_SIZE instead of PAGE_SIZE because that calls getpagesize
18 * on some systems.
15 */ 19 */
16 20
17#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field) 21#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field)
@@ -22,7 +26,7 @@ stub_clone_handler(void)
22 long err; 26 long err;
23 27
24 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, 28 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
25 UML_CONFIG_STUB_DATA + PAGE_SIZE / 2 - 29 UML_CONFIG_STUB_DATA + UM_KERN_PAGE_SIZE / 2 -
26 sizeof(void *)); 30 sizeof(void *));
27 if(err != 0) 31 if(err != 0)
28 goto out; 32 goto out;
@@ -36,9 +40,10 @@ stub_clone_handler(void)
36 if(err) 40 if(err)
37 goto out; 41 goto out;
38 42
39 err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, PAGE_SIZE, 43 err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA,
40 PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, 44 UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,
41 STUB_DATA(fd), STUB_DATA(offset)); 45 MAP_FIXED | MAP_SHARED, STUB_DATA(fd),
46 STUB_DATA(offset));
42 out: 47 out:
43 /* save current result. Parent: pid; child: retcode of mmap */ 48 /* save current result. Parent: pid; child: retcode of mmap */
44 STUB_DATA(err) = err; 49 STUB_DATA(err) = err;