25-akpm/arch/parisc/kernel/time.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff -puN arch/parisc/kernel/time.c~parisc-do_settimeofday-update arch/parisc/kernel/time.c --- 25/arch/parisc/kernel/time.c~parisc-do_settimeofday-update Wed Jun 11 15:05:27 2003 +++ 25-akpm/arch/parisc/kernel/time.c Wed Jun 11 15:06:50 2003 @@ -185,9 +185,12 @@ do_gettimeofday (struct timeval *tv) tv->tv_usec = usec; } -void +int do_settimeofday (struct timeval *tv) { + if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) + return -EINVAL; + write_seqlock_irq(&xtime_lock); { /* @@ -197,22 +200,23 @@ do_settimeofday (struct timeval *tv) * Discover what correction gettimeofday would have * done, and then undo it! */ - tv->tv_usec -= gettimeoffset(); - tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); + tv->tv_nsec -= gettimeoffset() * 1000; + tv->tv_nsec -= (jiffies - wall_jiffies) * (NSEC_PER_SEC / HZ); - 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; time_maxerror = NTP_PHASE_LIMIT; time_esterror = NTP_PHASE_LIMIT; } write_sequnlock_irq(&xtime_lock); + return 0; } _