mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
compat: generic compat get/settimeofday
Nothing arch specific in get/settimeofday. The details of the timeval conversion varied a little from arch to arch, but all with the same results. Also add an extern declaration for sys_tz to linux/time.h because externs in .c files are fowned upon. I'll kill the externs in various other files in a sparate patch. [[email protected]: coding-style fixes] Signed-off-by: Christoph Hellwig <[email protected]> Acked-by: David S. Miller <[email protected]> [ sparc bits ] Cc: "Luck, Tony" <[email protected]> Cc: Ralf Baechle <[email protected]> Acked-by: Kyle McMartin <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Grant Grundler <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Martin Schwidefsky <[email protected]> Cc: Heiko Carstens <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
f7a5000f7a
commit
b418da16dd
19 changed files with 85 additions and 460 deletions
|
|
@ -179,64 +179,6 @@ asmlinkage long sys32_sched_rr_get_interval(pid_t pid,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
put_compat_timeval(struct compat_timeval __user *u, struct timeval *t)
|
||||
{
|
||||
struct compat_timeval t32;
|
||||
t32.tv_sec = t->tv_sec;
|
||||
t32.tv_usec = t->tv_usec;
|
||||
return copy_to_user(u, &t32, sizeof t32);
|
||||
}
|
||||
|
||||
static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
|
||||
{
|
||||
long usec;
|
||||
|
||||
if (__get_user(o->tv_sec, &i->tv_sec))
|
||||
return -EFAULT;
|
||||
if (__get_user(usec, &i->tv_usec))
|
||||
return -EFAULT;
|
||||
o->tv_nsec = usec * 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage int
|
||||
sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
|
||||
{
|
||||
extern void do_gettimeofday(struct timeval *tv);
|
||||
|
||||
if (tv) {
|
||||
struct timeval ktv;
|
||||
do_gettimeofday(&ktv);
|
||||
if (put_compat_timeval(tv, &ktv))
|
||||
return -EFAULT;
|
||||
}
|
||||
if (tz) {
|
||||
extern struct timezone sys_tz;
|
||||
if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage
|
||||
int sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
|
||||
{
|
||||
struct timespec kts;
|
||||
struct timezone ktz;
|
||||
|
||||
if (tv) {
|
||||
if (get_ts32(&kts, tv))
|
||||
return -EFAULT;
|
||||
}
|
||||
if (tz) {
|
||||
if (copy_from_user(&ktz, tz, sizeof(ktz)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
|
||||
}
|
||||
|
||||
/*** copied from mips64 ***/
|
||||
/*
|
||||
* Ooo, nasty. We need here to frob 32-bit unsigned longs to
|
||||
|
|
|
|||
|
|
@ -149,8 +149,8 @@
|
|||
ENTRY_COMP(getrlimit)
|
||||
ENTRY_COMP(getrusage)
|
||||
/* struct timeval and timezone are maybe?? consistent wide and narrow */
|
||||
ENTRY_DIFF(gettimeofday)
|
||||
ENTRY_DIFF(settimeofday)
|
||||
ENTRY_COMP(gettimeofday)
|
||||
ENTRY_COMP(settimeofday)
|
||||
ENTRY_SAME(getgroups) /* 80 */
|
||||
ENTRY_SAME(setgroups)
|
||||
/* struct socketaddr... */
|
||||
|
|
|
|||
Loading…
Reference in a new issue