[PATCH v2] 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 --- include/linux/kernel.h | 2 -- kernel/compat.c| 65 -- kernel/timer.c | 70 +- 3 files changed, 69 insertions(+), 68 deletions(-) v2: I am so embarrassed that I forgot to include linux/compat.h in kernel/timer.c :-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 79fdd80..a8b579c 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -734,6 +734,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 19971d8..1e8f145 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(); - - /* 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, >uptime) || - __put_user (s.loads[0], >loads[0]) || - __put_user (s.loads[1], >loads[1]) || - __put_user (s.loads[2], >loads[2]) || - __put_user (s.totalram, >totalram) || - __put_user (s.freeram, >freeram) || - __put_user (s.sharedram, >sharedram) || - __put_user (s.bufferram, >bufferram) || - __put_user (s.totalswap, >totalswap) || - __put_user (s.freeswap, >freeswap) || - __put_user (s.procs, >procs) || - __put_user (s.totalhigh, >totalhigh) || - __put_user (s.freehigh, >freehigh) || - __put_user (s.mem_unit, >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 dbf7a78..06b3245 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -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(); + + /* 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;
[PATCH v2] 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 s...@canb.auug.org.au --- include/linux/kernel.h | 2 -- kernel/compat.c| 65 -- kernel/timer.c | 70 +- 3 files changed, 69 insertions(+), 68 deletions(-) v2: I am so embarrassed that I forgot to include linux/compat.h in kernel/timer.c :-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 79fdd80..a8b579c 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -734,6 +734,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 19971d8..1e8f145 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 dbf7a78..06b3245 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;