diff options
author | Christoph Hellwig <hch@lst.de> | 2008-10-16 01:02:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:33 -0400 |
commit | b418da16dd44810e5d5a22bba377cca80512a524 (patch) | |
tree | 20ac32ea027bb8d978a22fbfaf6580fd34518aa5 /arch/mips | |
parent | f7a5000f7a8924e9c5fad1801616601d6dc65a17 (diff) |
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.
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: David S. Miller <davem@davemloft.net> [ sparc bits ]
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Acked-by: Kyle McMartin <kyle@mcmartin.ca>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Grant Grundler <grundler@parisc-linux.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/kernel/linux32.c | 66 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-n32.S | 4 | ||||
-rw-r--r-- | arch/mips/kernel/scall64-o32.S | 4 |
3 files changed, 4 insertions, 70 deletions
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 89223a9bff2c..aa2c55e3b55f 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -133,72 +133,6 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy, | |||
133 | return sys_ftruncate(fd, merge_64(a2, a3)); | 133 | return sys_ftruncate(fd, merge_64(a2, a3)); |
134 | } | 134 | } |
135 | 135 | ||
136 | static inline long | ||
137 | get_tv32(struct timeval *o, struct compat_timeval __user *i) | ||
138 | { | ||
139 | return (!access_ok(VERIFY_READ, i, sizeof(*i)) || | ||
140 | (__get_user(o->tv_sec, &i->tv_sec) | | ||
141 | __get_user(o->tv_usec, &i->tv_usec))); | ||
142 | } | ||
143 | |||
144 | static inline long | ||
145 | put_tv32(struct compat_timeval __user *o, struct timeval *i) | ||
146 | { | ||
147 | return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) || | ||
148 | (__put_user(i->tv_sec, &o->tv_sec) | | ||
149 | __put_user(i->tv_usec, &o->tv_usec))); | ||
150 | } | ||
151 | |||
152 | extern struct timezone sys_tz; | ||
153 | |||
154 | asmlinkage int | ||
155 | sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) | ||
156 | { | ||
157 | if (tv) { | ||
158 | struct timeval ktv; | ||
159 | do_gettimeofday(&ktv); | ||
160 | if (put_tv32(tv, &ktv)) | ||
161 | return -EFAULT; | ||
162 | } | ||
163 | if (tz) { | ||
164 | if (copy_to_user(tz, &sys_tz, sizeof(sys_tz))) | ||
165 | return -EFAULT; | ||
166 | } | ||
167 | return 0; | ||
168 | } | ||
169 | |||
170 | static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i) | ||
171 | { | ||
172 | long usec; | ||
173 | |||
174 | if (!access_ok(VERIFY_READ, i, sizeof(*i))) | ||
175 | return -EFAULT; | ||
176 | if (__get_user(o->tv_sec, &i->tv_sec)) | ||
177 | return -EFAULT; | ||
178 | if (__get_user(usec, &i->tv_usec)) | ||
179 | return -EFAULT; | ||
180 | o->tv_nsec = usec * 1000; | ||
181 | return 0; | ||
182 | } | ||
183 | |||
184 | asmlinkage int | ||
185 | sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) | ||
186 | { | ||
187 | struct timespec kts; | ||
188 | struct timezone ktz; | ||
189 | |||
190 | if (tv) { | ||
191 | if (get_ts32(&kts, tv)) | ||
192 | return -EFAULT; | ||
193 | } | ||
194 | if (tz) { | ||
195 | if (copy_from_user(&ktz, tz, sizeof(ktz))) | ||
196 | return -EFAULT; | ||
197 | } | ||
198 | |||
199 | return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL); | ||
200 | } | ||
201 | |||
202 | asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, | 136 | asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, |
203 | unsigned int offset_low, loff_t __user * result, | 137 | unsigned int offset_low, loff_t __user * result, |
204 | unsigned int origin) | 138 | unsigned int origin) |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 324c5499dec2..e266b3aa6560 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
@@ -214,7 +214,7 @@ EXPORT(sysn32_call_table) | |||
214 | PTR sys_fchown | 214 | PTR sys_fchown |
215 | PTR sys_lchown | 215 | PTR sys_lchown |
216 | PTR sys_umask | 216 | PTR sys_umask |
217 | PTR sys32_gettimeofday | 217 | PTR compat_sys_gettimeofday |
218 | PTR compat_sys_getrlimit /* 6095 */ | 218 | PTR compat_sys_getrlimit /* 6095 */ |
219 | PTR compat_sys_getrusage | 219 | PTR compat_sys_getrusage |
220 | PTR compat_sys_sysinfo | 220 | PTR compat_sys_sysinfo |
@@ -279,7 +279,7 @@ EXPORT(sysn32_call_table) | |||
279 | PTR sys_chroot | 279 | PTR sys_chroot |
280 | PTR sys_sync | 280 | PTR sys_sync |
281 | PTR sys_acct | 281 | PTR sys_acct |
282 | PTR sys32_settimeofday | 282 | PTR compat_sys_settimeofday |
283 | PTR compat_sys_mount /* 6160 */ | 283 | PTR compat_sys_mount /* 6160 */ |
284 | PTR sys_umount | 284 | PTR sys_umount |
285 | PTR sys_swapon | 285 | PTR sys_swapon |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 85fedac99a57..6c7ef8313ebd 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
@@ -283,8 +283,8 @@ sys_call_table: | |||
283 | PTR compat_sys_setrlimit /* 4075 */ | 283 | PTR compat_sys_setrlimit /* 4075 */ |
284 | PTR compat_sys_getrlimit | 284 | PTR compat_sys_getrlimit |
285 | PTR compat_sys_getrusage | 285 | PTR compat_sys_getrusage |
286 | PTR sys32_gettimeofday | 286 | PTR compat_sys_gettimeofday |
287 | PTR sys32_settimeofday | 287 | PTR compat_sys_settimeofday |
288 | PTR sys_getgroups /* 4080 */ | 288 | PTR sys_getgroups /* 4080 */ |
289 | PTR sys_setgroups | 289 | PTR sys_setgroups |
290 | PTR sys_ni_syscall /* old_select */ | 290 | PTR sys_ni_syscall /* old_select */ |