diff options
Diffstat (limited to 'kernel/time/timekeeping.c')
| -rw-r--r-- | kernel/time/timekeeping.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 687dff49f6e7..e8c77d9c633a 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | /* | 23 | /* |
| 24 | * This read-write spinlock protects us from races in SMP while | 24 | * This read-write spinlock protects us from races in SMP while |
| 25 | * playing with xtime and avenrun. | 25 | * playing with xtime. |
| 26 | */ | 26 | */ |
| 27 | __cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock); | 27 | __cacheline_aligned_in_smp DEFINE_SEQLOCK(xtime_lock); |
| 28 | 28 | ||
| @@ -77,6 +77,10 @@ static void clocksource_forward_now(void) | |||
| 77 | clock->cycle_last = cycle_now; | 77 | clock->cycle_last = cycle_now; |
| 78 | 78 | ||
| 79 | nsec = cyc2ns(clock, cycle_delta); | 79 | nsec = cyc2ns(clock, cycle_delta); |
| 80 | |||
| 81 | /* If arch requires, add in gettimeoffset() */ | ||
| 82 | nsec += arch_gettimeoffset(); | ||
| 83 | |||
| 80 | timespec_add_ns(&xtime, nsec); | 84 | timespec_add_ns(&xtime, nsec); |
| 81 | 85 | ||
| 82 | nsec = ((s64)cycle_delta * clock->mult_orig) >> clock->shift; | 86 | nsec = ((s64)cycle_delta * clock->mult_orig) >> clock->shift; |
| @@ -111,6 +115,9 @@ void getnstimeofday(struct timespec *ts) | |||
| 111 | /* convert to nanoseconds: */ | 115 | /* convert to nanoseconds: */ |
| 112 | nsecs = cyc2ns(clock, cycle_delta); | 116 | nsecs = cyc2ns(clock, cycle_delta); |
| 113 | 117 | ||
| 118 | /* If arch requires, add in gettimeoffset() */ | ||
| 119 | nsecs += arch_gettimeoffset(); | ||
| 120 | |||
| 114 | } while (read_seqretry(&xtime_lock, seq)); | 121 | } while (read_seqretry(&xtime_lock, seq)); |
| 115 | 122 | ||
| 116 | timespec_add_ns(ts, nsecs); | 123 | timespec_add_ns(ts, nsecs); |
