25-akpm/arch/v850/kernel/time.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) diff -puN arch/v850/kernel/time.c~v850-do_settimeofday-update arch/v850/kernel/time.c --- 25/arch/v850/kernel/time.c~v850-do_settimeofday-update Wed Jun 11 15:26:43 2003 +++ 25-akpm/arch/v850/kernel/time.c Wed Jun 11 15:27:22 2003 @@ -147,8 +147,11 @@ void do_gettimeofday (struct timeval *tv 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); /* This is revolting. We need to set the xtime.tv_nsec @@ -158,16 +161,16 @@ void do_settimeofday (struct timeval *tv * would have done, and then undo it! */ #if 0 - tv->tv_usec -= mach_gettimeoffset (); + tv->tv_nsec -= mach_gettimeoffset() * 1000; #endif - while (tv->tv_usec < 0) { - tv->tv_usec += 1000000; + while (tv->tv_nsec < 0) { + tv->tv_nsec += NSEC_PER_SEC; tv->tv_sec--; } xtime.tv_sec = tv->tv_sec; - xtime.tv_nsec = tv->tv_usec * 1000; + xtime.tv_nsec = tv->tv_nsec; time_adjust = 0; /* stop active adjtime () */ time_status |= STA_UNSYNC; @@ -175,6 +178,7 @@ void do_settimeofday (struct timeval *tv time_esterror = NTP_PHASE_LIMIT; write_sequnlock_irq (&xtime_lock); + return 0; } static int timer_dev_id; _