mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
8d82e180b5
commit
1a0df59444
|
@ -798,6 +798,4 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
|
||||||
# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
|
# define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int do_sysinfo(struct sysinfo *info);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1138,71 +1138,6 @@ asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
|
||||||
}
|
}
|
||||||
#endif
|
#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_SYSCALL_DEFINE2(sched_rr_get_interval,
|
||||||
compat_pid_t, pid,
|
compat_pid_t, pid,
|
||||||
struct compat_timespec __user *, interval)
|
struct compat_timespec __user *, interval)
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/sched/sysctl.h>
|
#include <linux/sched/sysctl.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
|
@ -1567,7 +1568,7 @@ SYSCALL_DEFINE0(gettid)
|
||||||
* do_sysinfo - fill in sysinfo struct
|
* do_sysinfo - fill in sysinfo struct
|
||||||
* @info: pointer to buffer to fill
|
* @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 long mem_total, sav_total;
|
||||||
unsigned int mem_unit, bitcount;
|
unsigned int mem_unit, bitcount;
|
||||||
|
@ -1642,6 +1643,73 @@ SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)
|
||||||
return 0;
|
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)
|
static int __cpuinit init_timers_cpu(int cpu)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
|
Loading…
Reference in New Issue