diff options
Diffstat (limited to 'arch/m32r/kernel/time.c')
| -rw-r--r-- | arch/m32r/kernel/time.c | 74 | 
1 files changed, 3 insertions, 71 deletions
diff --git a/arch/m32r/kernel/time.c b/arch/m32r/kernel/time.c index cada3ba4b99..ba61c4c7320 100644 --- a/arch/m32r/kernel/time.c +++ b/arch/m32r/kernel/time.c @@ -48,7 +48,7 @@ extern void smp_local_timer_interrupt(void);  static unsigned long latch; -static unsigned long do_gettimeoffset(void) +u32 arch_gettimeoffset(void)  {  	unsigned long  elapsed_time = 0;  /* [us] */ @@ -93,79 +93,10 @@ static unsigned long do_gettimeoffset(void)  #error no chip configuration  #endif -	return elapsed_time; +	return elapsed_time * 1000;  }  /* - * This version of gettimeofday has near microsecond resolution. - */ -void do_gettimeofday(struct timeval *tv) -{ -	unsigned long seq; -	unsigned long usec, sec; -	unsigned long max_ntp_tick = tick_usec - tickadj; - -	do { -		seq = read_seqbegin(&xtime_lock); - -		usec = do_gettimeoffset(); - -		/* -		 * If time_adjust is negative then NTP is slowing the clock -		 * so make sure not to go into next possible interval. -		 * Better to lose some accuracy than have time go backwards.. -		 */ -		if (unlikely(time_adjust < 0)) -			usec = min(usec, max_ntp_tick); - -		sec = xtime.tv_sec; -		usec += (xtime.tv_nsec / 1000); -	} while (read_seqretry(&xtime_lock, seq)); - -	while (usec >= 1000000) { -		usec -= 1000000; -		sec++; -	} - -	tv->tv_sec = sec; -	tv->tv_usec = usec; -} - -EXPORT_SYMBOL(do_gettimeofday); - -int do_settimeofday(struct timespec *tv) -{ -	time_t wtm_sec, sec = tv->tv_sec; - 	long wtm_nsec, nsec = tv->tv_nsec; - -	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) -		return -EINVAL; - -	write_seqlock_irq(&xtime_lock); -	/* -	 * This is revolting. We need to set "xtime" correctly. However, the -	 * value in this location is the value at the most recent update of -	 * wall time.  Discover what correction gettimeofday() would have -	 * made, and then undo it! -	 */ -	nsec -= do_gettimeoffset() * NSEC_PER_USEC; - -	wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); -	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); - -	set_normalized_timespec(&xtime, sec, nsec); -	set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); - -	ntp_clear(); -	write_sequnlock_irq(&xtime_lock); -	clock_was_set(); - -	return 0; -} - -EXPORT_SYMBOL(do_settimeofday); - -/*   * In order to set the CMOS clock precisely, set_rtc_mmss has to be   * called 500 ms after the second nowtime has started, because when   * nowtime is written into the registers of the CMOS clock, it will @@ -192,6 +123,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)  #ifndef CONFIG_SMP  	profile_tick(CPU_PROFILING);  #endif +	/* XXX FIXME. Uh, the xtime_lock should be held here, no? */  	do_timer(1);  #ifndef CONFIG_SMP  | 
