diff options
| author | Stephen Rothwell <sfr@canb.auug.org.au> | 2013-04-30 15:27:34 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-30 17:04:03 -0700 | 
| commit | 1a0df59444972105f0d4c2b0c16ce414d70c420a (patch) | |
| tree | 39403c6890f792b0a4af7218884d375ec7b975ed | |
| parent | 8d82e180b51f8ecca9ae9d6a3e7f01d50ea34c20 (diff) | |
| download | olio-linux-3.10-1a0df59444972105f0d4c2b0c16ce414d70c420a.tar.xz olio-linux-3.10-1a0df59444972105f0d4c2b0c16ce414d70c420a.zip | |
kernel/compat.c: make do_sysinfo() static
The only use outside of kernel/timer.c was in kernel/compat.c, so move
compat_sys_sysinfo() next to sys_sysinfo() in kernel/timer.c.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | include/linux/kernel.h | 2 | ||||
| -rw-r--r-- | kernel/compat.c | 65 | ||||
| -rw-r--r-- | kernel/timer.c | 70 | 
3 files changed, 69 insertions, 68 deletions
| diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 2dac79c3919..6d1844f393c 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -798,6 +798,4 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }  # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD  #endif -extern int do_sysinfo(struct sysinfo *info); -  #endif diff --git a/kernel/compat.c b/kernel/compat.c index 19971d8c729..1e8f1455117 100644 --- a/kernel/compat.c +++ b/kernel/compat.c @@ -1138,71 +1138,6 @@ asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,  }  #endif -struct compat_sysinfo { -	s32 uptime; -	u32 loads[3]; -	u32 totalram; -	u32 freeram; -	u32 sharedram; -	u32 bufferram; -	u32 totalswap; -	u32 freeswap; -	u16 procs; -	u16 pad; -	u32 totalhigh; -	u32 freehigh; -	u32 mem_unit; -	char _f[20-2*sizeof(u32)-sizeof(int)]; -}; - -asmlinkage long -compat_sys_sysinfo(struct compat_sysinfo __user *info) -{ -	struct sysinfo s; - -	do_sysinfo(&s); - -	/* Check to see if any memory value is too large for 32-bit and scale -	 *  down if needed -	 */ -	if ((s.totalram >> 32) || (s.totalswap >> 32)) { -		int bitcount = 0; - -		while (s.mem_unit < PAGE_SIZE) { -			s.mem_unit <<= 1; -			bitcount++; -		} - -		s.totalram >>= bitcount; -		s.freeram >>= bitcount; -		s.sharedram >>= bitcount; -		s.bufferram >>= bitcount; -		s.totalswap >>= bitcount; -		s.freeswap >>= bitcount; -		s.totalhigh >>= bitcount; -		s.freehigh >>= bitcount; -	} - -	if (!access_ok(VERIFY_WRITE, info, sizeof(struct compat_sysinfo)) || -	    __put_user (s.uptime, &info->uptime) || -	    __put_user (s.loads[0], &info->loads[0]) || -	    __put_user (s.loads[1], &info->loads[1]) || -	    __put_user (s.loads[2], &info->loads[2]) || -	    __put_user (s.totalram, &info->totalram) || -	    __put_user (s.freeram, &info->freeram) || -	    __put_user (s.sharedram, &info->sharedram) || -	    __put_user (s.bufferram, &info->bufferram) || -	    __put_user (s.totalswap, &info->totalswap) || -	    __put_user (s.freeswap, &info->freeswap) || -	    __put_user (s.procs, &info->procs) || -	    __put_user (s.totalhigh, &info->totalhigh) || -	    __put_user (s.freehigh, &info->freehigh) || -	    __put_user (s.mem_unit, &info->mem_unit)) -		return -EFAULT; - -	return 0; -} -  COMPAT_SYSCALL_DEFINE2(sched_rr_get_interval,  		       compat_pid_t, pid,  		       struct compat_timespec __user *, interval) diff --git a/kernel/timer.c b/kernel/timer.c index dbf7a78a1ef..06b3245624e 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -41,6 +41,7 @@  #include <linux/sched.h>  #include <linux/sched/sysctl.h>  #include <linux/slab.h> +#include <linux/compat.h>  #include <asm/uaccess.h>  #include <asm/unistd.h> @@ -1567,7 +1568,7 @@ SYSCALL_DEFINE0(gettid)   * do_sysinfo - fill in sysinfo struct   * @info: pointer to buffer to fill   */ -int do_sysinfo(struct sysinfo *info) +static int do_sysinfo(struct sysinfo *info)  {  	unsigned long mem_total, sav_total;  	unsigned int mem_unit, bitcount; @@ -1642,6 +1643,73 @@ SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)  	return 0;  } +#ifdef CONFIG_COMPAT +struct compat_sysinfo { +	s32 uptime; +	u32 loads[3]; +	u32 totalram; +	u32 freeram; +	u32 sharedram; +	u32 bufferram; +	u32 totalswap; +	u32 freeswap; +	u16 procs; +	u16 pad; +	u32 totalhigh; +	u32 freehigh; +	u32 mem_unit; +	char _f[20-2*sizeof(u32)-sizeof(int)]; +}; + +asmlinkage long +compat_sys_sysinfo(struct compat_sysinfo __user *info) +{ +	struct sysinfo s; + +	do_sysinfo(&s); + +	/* Check to see if any memory value is too large for 32-bit and scale +	 *  down if needed +	 */ +	if ((s.totalram >> 32) || (s.totalswap >> 32)) { +		int bitcount = 0; + +		while (s.mem_unit < PAGE_SIZE) { +			s.mem_unit <<= 1; +			bitcount++; +		} + +		s.totalram >>= bitcount; +		s.freeram >>= bitcount; +		s.sharedram >>= bitcount; +		s.bufferram >>= bitcount; +		s.totalswap >>= bitcount; +		s.freeswap >>= bitcount; +		s.totalhigh >>= bitcount; +		s.freehigh >>= bitcount; +	} + +	if (!access_ok(VERIFY_WRITE, info, sizeof(struct compat_sysinfo)) || +	    __put_user (s.uptime, &info->uptime) || +	    __put_user (s.loads[0], &info->loads[0]) || +	    __put_user (s.loads[1], &info->loads[1]) || +	    __put_user (s.loads[2], &info->loads[2]) || +	    __put_user (s.totalram, &info->totalram) || +	    __put_user (s.freeram, &info->freeram) || +	    __put_user (s.sharedram, &info->sharedram) || +	    __put_user (s.bufferram, &info->bufferram) || +	    __put_user (s.totalswap, &info->totalswap) || +	    __put_user (s.freeswap, &info->freeswap) || +	    __put_user (s.procs, &info->procs) || +	    __put_user (s.totalhigh, &info->totalhigh) || +	    __put_user (s.freehigh, &info->freehigh) || +	    __put_user (s.mem_unit, &info->mem_unit)) +		return -EFAULT; + +	return 0; +} +#endif /* CONFIG_COMPAT */ +  static int __cpuinit init_timers_cpu(int cpu)  {  	int j; |