[PATCH] uml: eliminate use of libc PAGE_SIZE
[firefly-linux-kernel-4.4.55.git] / arch / um / kernel / skas / clone.c
index 4dc55f10cd182af2e6366c15d71954b1eb4e1ed3..cb37ce9124a6f4a01702f260cab102f8a332b017 100644 (file)
@@ -9,18 +9,24 @@
 #include "stub-data.h"
 #include "uml-config.h"
 #include "sysdep/stub.h"
+#include "kern_constants.h"
 
 /* This is in a separate file because it needs to be compiled with any
  * extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled
+ *
+ * Use UM_KERN_PAGE_SIZE instead of PAGE_SIZE because that calls getpagesize
+ * on some systems.
  */
+
+#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field)
+
 void __attribute__ ((__section__ (".__syscall_stub")))
 stub_clone_handler(void)
 {
        long err;
-       struct stub_data *from = (struct stub_data *) UML_CONFIG_STUB_DATA;
 
        err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
-                           UML_CONFIG_STUB_DATA + PAGE_SIZE / 2 -
+                           UML_CONFIG_STUB_DATA + UM_KERN_PAGE_SIZE / 2 -
                            sizeof(void *));
        if(err != 0)
                goto out;
@@ -30,15 +36,16 @@ stub_clone_handler(void)
                goto out;
 
        err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL,
-                           (long) &from->timer, 0);
+                           (long) &STUB_DATA(timer), 0);
        if(err)
                goto out;
 
-       err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, PAGE_SIZE,
-                           PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED,
-                           from->fd, from->offset);
+       err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA,
+                           UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,
+                           MAP_FIXED | MAP_SHARED, STUB_DATA(fd),
+                           STUB_DATA(offset));
  out:
        /* save current result. Parent: pid; child: retcode of mmap */
-       from->err = err;
+       STUB_DATA(err) = err;
        trap_myself();
 }