Commit 2e508205 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] sh: fix do_settimeofday() for new API

parent f02606c8
...@@ -151,8 +151,11 @@ void do_gettimeofday(struct timeval *tv) ...@@ -151,8 +151,11 @@ void do_gettimeofday(struct timeval *tv)
tv->tv_usec = usec; tv->tv_usec = usec;
} }
void do_settimeofday(struct timeval *tv) int do_settimeofday(struct timespec *tv)
{ {
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
return -EINVAL;
write_seqlock_irq(&xtime_lock); write_seqlock_irq(&xtime_lock);
/* /*
* This is revolting. We need to set "xtime" correctly. However, the * This is revolting. We need to set "xtime" correctly. However, the
...@@ -160,11 +163,11 @@ void do_settimeofday(struct timeval *tv) ...@@ -160,11 +163,11 @@ void do_settimeofday(struct timeval *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* made, and then undo it! * made, and then undo it!
*/ */
tv->tv_usec -= do_gettimeoffset(); tv->tv_nsec -= 1000 * (do_gettimeoffset() +
tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); (jiffies - wall_jiffies) * (1000000 / HZ));
while (tv->tv_usec < 0) { while (tv->tv_nsec < 0) {
tv->tv_usec += 1000000; tv->tv_nsec += NSEC_PER_SEC;
tv->tv_sec--; tv->tv_sec--;
} }
...@@ -174,6 +177,7 @@ void do_settimeofday(struct timeval *tv) ...@@ -174,6 +177,7 @@ void do_settimeofday(struct timeval *tv)
time_maxerror = NTP_PHASE_LIMIT; time_maxerror = NTP_PHASE_LIMIT;
time_esterror = NTP_PHASE_LIMIT; time_esterror = NTP_PHASE_LIMIT;
write_sequnlock_irq(&xtime_lock); write_sequnlock_irq(&xtime_lock);
return 0;
} }
/* last time the RTC clock got updated */ /* last time the RTC clock got updated */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment