]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/compat.c
whitespace fixes: compat syscalls
[linux-2.6-omap-h63xx.git] / kernel / compat.c
index 6952dd057300f637e68a059ba1f299d8464ae9f8..b78328af19ad778f0c8962740a1078b65cf96ed5 100644 (file)
@@ -247,8 +247,8 @@ asmlinkage long compat_sys_setrlimit(unsigned int resource,
        int ret;
        mm_segment_t old_fs = get_fs ();
 
-       if (resource >= RLIM_NLIMITS) 
-               return -EINVAL; 
+       if (resource >= RLIM_NLIMITS)
+               return -EINVAL;
 
        if (!access_ok(VERIFY_READ, rlim, sizeof(*rlim)) ||
            __get_user(r.rlim_cur, &rlim->rlim_cur) ||
@@ -475,23 +475,23 @@ asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, unsigned int len,
        return min_length;
 }
 
-static int get_compat_itimerspec(struct itimerspec *dst, 
-                                struct compat_itimerspec __user *src)
-{ 
+int get_compat_itimerspec(struct itimerspec *dst,
+                         const struct compat_itimerspec __user *src)
+{
        if (get_compat_timespec(&dst->it_interval, &src->it_interval) ||
            get_compat_timespec(&dst->it_value, &src->it_value))
                return -EFAULT;
        return 0;
-} 
+}
 
-static int put_compat_itimerspec(struct compat_itimerspec __user *dst, 
-                                struct itimerspec *src)
-{ 
+int put_compat_itimerspec(struct compat_itimerspec __user *dst,
+                         const struct itimerspec *src)
+{
        if (put_compat_timespec(&src->it_interval, &dst->it_interval) ||
            put_compat_timespec(&src->it_value, &dst->it_value))
                return -EFAULT;
        return 0;
-} 
+}
 
 long compat_sys_timer_create(clockid_t which_clock,
                        struct compat_sigevent __user *timer_event_spec,
@@ -512,9 +512,9 @@ long compat_sys_timer_create(clockid_t which_clock,
 }
 
 long compat_sys_timer_settime(timer_t timer_id, int flags,
-                         struct compat_itimerspec __user *new, 
+                         struct compat_itimerspec __user *new,
                          struct compat_itimerspec __user *old)
-{ 
+{
        long err;
        mm_segment_t oldfs;
        struct itimerspec newts, oldts;
@@ -522,58 +522,58 @@ long compat_sys_timer_settime(timer_t timer_id, int flags,
        if (!new)
                return -EINVAL;
        if (get_compat_itimerspec(&newts, new))
-               return -EFAULT; 
+               return -EFAULT;
        oldfs = get_fs();
        set_fs(KERNEL_DS);
        err = sys_timer_settime(timer_id, flags,
                                (struct itimerspec __user *) &newts,
                                (struct itimerspec __user *) &oldts);
-       set_fs(oldfs); 
+       set_fs(oldfs);
        if (!err && old && put_compat_itimerspec(old, &oldts))
                return -EFAULT;
        return err;
-} 
+}
 
 long compat_sys_timer_gettime(timer_t timer_id,
                struct compat_itimerspec __user *setting)
-{ 
+{
        long err;
        mm_segment_t oldfs;
-       struct itimerspec ts; 
+       struct itimerspec ts;
 
        oldfs = get_fs();
        set_fs(KERNEL_DS);
        err = sys_timer_gettime(timer_id,
-                               (struct itimerspec __user *) &ts); 
-       set_fs(oldfs); 
+                               (struct itimerspec __user *) &ts);
+       set_fs(oldfs);
        if (!err && put_compat_itimerspec(setting, &ts))
                return -EFAULT;
        return err;
-} 
+}
 
 long compat_sys_clock_settime(clockid_t which_clock,
                struct compat_timespec __user *tp)
 {
        long err;
        mm_segment_t oldfs;
-       struct timespec ts; 
+       struct timespec ts;
 
        if (get_compat_timespec(&ts, tp))
-               return -EFAULT; 
+               return -EFAULT;
        oldfs = get_fs();
-       set_fs(KERNEL_DS);      
+       set_fs(KERNEL_DS);
        err = sys_clock_settime(which_clock,
                                (struct timespec __user *) &ts);
        set_fs(oldfs);
        return err;
-} 
+}
 
 long compat_sys_clock_gettime(clockid_t which_clock,
                struct compat_timespec __user *tp)
 {
        long err;
        mm_segment_t oldfs;
-       struct timespec ts; 
+       struct timespec ts;
 
        oldfs = get_fs();
        set_fs(KERNEL_DS);
@@ -581,16 +581,16 @@ long compat_sys_clock_gettime(clockid_t which_clock,
                                (struct timespec __user *) &ts);
        set_fs(oldfs);
        if (!err && put_compat_timespec(&ts, tp))
-               return -EFAULT; 
+               return -EFAULT;
        return err;
-} 
+}
 
 long compat_sys_clock_getres(clockid_t which_clock,
                struct compat_timespec __user *tp)
 {
        long err;
        mm_segment_t oldfs;
-       struct timespec ts; 
+       struct timespec ts;
 
        oldfs = get_fs();
        set_fs(KERNEL_DS);
@@ -598,9 +598,9 @@ long compat_sys_clock_getres(clockid_t which_clock,
                               (struct timespec __user *) &ts);
        set_fs(oldfs);
        if (!err && tp && put_compat_timespec(&ts, tp))
-               return -EFAULT; 
+               return -EFAULT;
        return err;
-} 
+}
 
 static long compat_clock_nanosleep_restart(struct restart_block *restart)
 {
@@ -632,10 +632,10 @@ long compat_sys_clock_nanosleep(clockid_t which_clock, int flags,
 {
        long err;
        mm_segment_t oldfs;
-       struct timespec in, out; 
+       struct timespec in, out;
        struct restart_block *restart;
 
-       if (get_compat_timespec(&in, rqtp)) 
+       if (get_compat_timespec(&in, rqtp))
                return -EFAULT;
 
        oldfs = get_fs();
@@ -654,8 +654,8 @@ long compat_sys_clock_nanosleep(clockid_t which_clock, int flags,
                restart->fn = compat_clock_nanosleep_restart;
                restart->arg1 = (unsigned long) rmtp;
        }
-       return err;     
-} 
+       return err;
+}
 
 /*
  * We currently only need the following fields from the sigevent
@@ -1016,3 +1016,69 @@ asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
        return sys_migrate_pages(pid, nr_bits + 1, old, new);
 }
 #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;
+}
+