mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 09:13:55 +08:00
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
|
||||
#endif
|
||||
|
||||
extern int do_sysinfo(struct sysinfo *info);
|
||||
|
||||
#endif
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user