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/parisc | |
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/parisc')
-rw-r--r-- | arch/parisc/kernel/sys_parisc32.c | 58 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall_table.S | 4 |
2 files changed, 2 insertions, 60 deletions
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index 2c3af17e049..0838155b7a8 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c | |||
@@ -179,64 +179,6 @@ asmlinkage long sys32_sched_rr_get_interval(pid_t pid, | |||
179 | return ret; | 179 | return ret; |
180 | } | 180 | } |
181 | 181 | ||
182 | static int | ||
183 | put_compat_timeval(struct compat_timeval __user *u, struct timeval *t) | ||
184 | { | ||
185 | struct compat_timeval t32; | ||
186 | t32.tv_sec = t->tv_sec; | ||
187 | t32.tv_usec = t->tv_usec; | ||
188 | return copy_to_user(u, &t32, sizeof t32); | ||
189 | } | ||
190 | |||
191 | static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i) | ||
192 | { | ||
193 | long usec; | ||
194 | |||
195 | if (__get_user(o->tv_sec, &i->tv_sec)) | ||
196 | return -EFAULT; | ||
197 | if (__get_user(usec, &i->tv_usec)) | ||
198 | return -EFAULT; | ||
199 | o->tv_nsec = usec * 1000; | ||
200 | return 0; | ||
201 | } | ||
202 | |||
203 | asmlinkage int | ||
204 | sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) | ||
205 | { | ||
206 | extern void do_gettimeofday(struct timeval *tv); | ||
207 | |||
208 | if (tv) { | ||
209 | struct timeval ktv; | ||
210 | do_gettimeofday(&ktv); | ||
211 | if (put_compat_timeval(tv, &ktv)) | ||
212 | return -EFAULT; | ||
213 | } | ||
214 | if (tz) { | ||
215 | extern struct timezone sys_tz; | ||
216 | if (copy_to_user(tz, &sys_tz, sizeof(sys_tz))) | ||
217 | return -EFAULT; | ||
218 | } | ||
219 | return 0; | ||
220 | } | ||
221 | |||
222 | asmlinkage | ||
223 | int sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz) | ||
224 | { | ||
225 | struct timespec kts; | ||
226 | struct timezone ktz; | ||
227 | |||
228 | if (tv) { | ||
229 | if (get_ts32(&kts, tv)) | ||
230 | return -EFAULT; | ||
231 | } | ||
232 | if (tz) { | ||
233 | if (copy_from_user(&ktz, tz, sizeof(ktz))) | ||
234 | return -EFAULT; | ||
235 | } | ||
236 | |||
237 | return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL); | ||
238 | } | ||
239 | |||
240 | /*** copied from mips64 ***/ | 182 | /*** copied from mips64 ***/ |
241 | /* | 183 | /* |
242 | * Ooo, nasty. We need here to frob 32-bit unsigned longs to | 184 | * Ooo, nasty. We need here to frob 32-bit unsigned longs to |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 6b5ac38f5a9..c7e59f54881 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -149,8 +149,8 @@ | |||
149 | ENTRY_COMP(getrlimit) | 149 | ENTRY_COMP(getrlimit) |
150 | ENTRY_COMP(getrusage) | 150 | ENTRY_COMP(getrusage) |
151 | /* struct timeval and timezone are maybe?? consistent wide and narrow */ | 151 | /* struct timeval and timezone are maybe?? consistent wide and narrow */ |
152 | ENTRY_DIFF(gettimeofday) | 152 | ENTRY_COMP(gettimeofday) |
153 | ENTRY_DIFF(settimeofday) | 153 | ENTRY_COMP(settimeofday) |
154 | ENTRY_SAME(getgroups) /* 80 */ | 154 | ENTRY_SAME(getgroups) /* 80 */ |
155 | ENTRY_SAME(setgroups) | 155 | ENTRY_SAME(setgroups) |
156 | /* struct socketaddr... */ | 156 | /* struct socketaddr... */ |