


 25-akpm/arch/ia64/kernel/time.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff -puN arch/ia64/kernel/time.c~ia64-do_settimeofday-update arch/ia64/kernel/time.c
--- 25/arch/ia64/kernel/time.c~ia64-do_settimeofday-update	Wed Jun 11 15:02:51 2003
+++ 25-akpm/arch/ia64/kernel/time.c	Wed Jun 11 15:05:12 2003
@@ -98,11 +98,14 @@ set_normalized_timespec (struct timespec
 	ts->tv_nsec = nsec;
 }
 
-void
-do_settimeofday (struct timeval *tv)
+int
+do_settimeofday (struct timespec *tv)
 {
 	time_t wtm_sec, sec = tv->tv_sec;
-	long wtm_nsec, nsec = tv->tv_usec * 1000;
+	long wtm_nsec, nsec = tv->tv_nsec;
+
+	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
+		return -EINVAL;
 
 	write_seqlock_irq(&xtime_lock);
 	{
@@ -127,6 +130,7 @@ do_settimeofday (struct timeval *tv)
 	}
 	write_sequnlock_irq(&xtime_lock);
 	clock_was_set();
+	return 0;
 }
 
 void
@@ -134,6 +138,9 @@ do_gettimeofday (struct timeval *tv)
 {
 	unsigned long seq, nsec, usec, sec, old, offset;
 
+	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
+		return -EINVAL;
+
 	while (1) {
 		seq = read_seqbegin(&xtime_lock);
 		{

_
