aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index e236f98f7ec5..b88806c66244 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -28,6 +28,7 @@
28#include <linux/tty.h> 28#include <linux/tty.h>
29#include <linux/signal.h> 29#include <linux/signal.h>
30#include <linux/cn_proc.h> 30#include <linux/cn_proc.h>
31#include <linux/getcpu.h>
31 32
32#include <linux/compat.h> 33#include <linux/compat.h>
33#include <linux/syscalls.h> 34#include <linux/syscalls.h>
@@ -611,7 +612,6 @@ void kernel_restart(char *cmd)
611 } else { 612 } else {
612 printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd); 613 printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
613 } 614 }
614 printk(".\n");
615 machine_restart(cmd); 615 machine_restart(cmd);
616} 616}
617EXPORT_SYMBOL_GPL(kernel_restart); 617EXPORT_SYMBOL_GPL(kernel_restart);
@@ -2062,3 +2062,33 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
2062 } 2062 }
2063 return error; 2063 return error;
2064} 2064}
2065
2066asmlinkage long sys_getcpu(unsigned __user *cpup, unsigned __user *nodep,
2067 struct getcpu_cache __user *cache)
2068{
2069 int err = 0;
2070 int cpu = raw_smp_processor_id();
2071 if (cpup)
2072 err |= put_user(cpu, cpup);
2073 if (nodep)
2074 err |= put_user(cpu_to_node(cpu), nodep);
2075 if (cache) {
2076 /*
2077 * The cache is not needed for this implementation,
2078 * but make sure user programs pass something
2079 * valid. vsyscall implementations can instead make
2080 * good use of the cache. Only use t0 and t1 because
2081 * these are available in both 32bit and 64bit ABI (no
2082 * need for a compat_getcpu). 32bit has enough
2083 * padding
2084 */
2085 unsigned long t0, t1;
2086 get_user(t0, &cache->blob[0]);
2087 get_user(t1, &cache->blob[1]);
2088 t0++;
2089 t1++;
2090 put_user(t0, &cache->blob[0]);
2091 put_user(t1, &cache->blob[1]);
2092 }
2093 return err ? -EFAULT : 0;
2094}