aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel')
-rw-r--r--arch/alpha/kernel/time.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c
index 7c1e44420a78..581ddcc22fc5 100644
--- a/arch/alpha/kernel/time.c
+++ b/arch/alpha/kernel/time.c
@@ -54,8 +54,6 @@
54#include "proto.h" 54#include "proto.h"
55#include "irq_impl.h" 55#include "irq_impl.h"
56 56
57extern unsigned long wall_jiffies; /* kernel/timer.c */
58
59static int set_rtc_mmss(unsigned long); 57static int set_rtc_mmss(unsigned long);
60 58
61DEFINE_SPINLOCK(rtc_lock); 59DEFINE_SPINLOCK(rtc_lock);
@@ -413,7 +411,7 @@ void
413do_gettimeofday(struct timeval *tv) 411do_gettimeofday(struct timeval *tv)
414{ 412{
415 unsigned long flags; 413 unsigned long flags;
416 unsigned long sec, usec, lost, seq; 414 unsigned long sec, usec, seq;
417 unsigned long delta_cycles, delta_usec, partial_tick; 415 unsigned long delta_cycles, delta_usec, partial_tick;
418 416
419 do { 417 do {
@@ -423,14 +421,13 @@ do_gettimeofday(struct timeval *tv)
423 sec = xtime.tv_sec; 421 sec = xtime.tv_sec;
424 usec = (xtime.tv_nsec / 1000); 422 usec = (xtime.tv_nsec / 1000);
425 partial_tick = state.partial_tick; 423 partial_tick = state.partial_tick;
426 lost = jiffies - wall_jiffies;
427 424
428 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); 425 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
429 426
430#ifdef CONFIG_SMP 427#ifdef CONFIG_SMP
431 /* Until and unless we figure out how to get cpu cycle counters 428 /* Until and unless we figure out how to get cpu cycle counters
432 in sync and keep them there, we can't use the rpcc tricks. */ 429 in sync and keep them there, we can't use the rpcc tricks. */
433 delta_usec = lost * (1000000 / HZ); 430 delta_usec = 0;
434#else 431#else
435 /* 432 /*
436 * usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks) 433 * usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks)
@@ -446,8 +443,7 @@ do_gettimeofday(struct timeval *tv)
446 */ 443 */
447 444
448 delta_usec = (delta_cycles * state.scaled_ticks_per_cycle 445 delta_usec = (delta_cycles * state.scaled_ticks_per_cycle
449 + partial_tick 446 + partial_tick) * 15625;
450 + (lost << FIX_SHIFT)) * 15625;
451 delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; 447 delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
452#endif 448#endif
453 449
@@ -480,12 +476,11 @@ do_settimeofday(struct timespec *tv)
480 time. Without this, a full-tick error is possible. */ 476 time. Without this, a full-tick error is possible. */
481 477
482#ifdef CONFIG_SMP 478#ifdef CONFIG_SMP
483 delta_nsec = (jiffies - wall_jiffies) * (NSEC_PER_SEC / HZ); 479 delta_nsec = 0;
484#else 480#else
485 delta_nsec = rpcc() - state.last_time; 481 delta_nsec = rpcc() - state.last_time;
486 delta_nsec = (delta_nsec * state.scaled_ticks_per_cycle 482 delta_nsec = (delta_nsec * state.scaled_ticks_per_cycle
487 + state.partial_tick 483 + state.partial_tick) * 15625;
488 + ((jiffies - wall_jiffies) << FIX_SHIFT)) * 15625;
489 delta_nsec = ((delta_nsec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; 484 delta_nsec = ((delta_nsec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
490 delta_nsec *= 1000; 485 delta_nsec *= 1000;
491#endif 486#endif