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;

_