diff options
Diffstat (limited to 'arch/powerpc/kernel')
| -rw-r--r-- | arch/powerpc/kernel/time.c | 8 | ||||
| -rw-r--r-- | arch/powerpc/kernel/vdso.c | 12 |
2 files changed, 17 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 727a6699f2f4..c627cf86d1e3 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -239,7 +239,7 @@ static void snapshot_tb_and_purr(void *data) | |||
| 239 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); | 239 | struct cpu_purr_data *p = &__get_cpu_var(cpu_purr_data); |
| 240 | 240 | ||
| 241 | local_irq_save(flags); | 241 | local_irq_save(flags); |
| 242 | p->tb = mftb(); | 242 | p->tb = get_tb_or_rtc(); |
| 243 | p->purr = mfspr(SPRN_PURR); | 243 | p->purr = mfspr(SPRN_PURR); |
| 244 | wmb(); | 244 | wmb(); |
| 245 | p->initialized = 1; | 245 | p->initialized = 1; |
| @@ -317,7 +317,7 @@ static void snapshot_purr(void) | |||
| 317 | */ | 317 | */ |
| 318 | void snapshot_timebase(void) | 318 | void snapshot_timebase(void) |
| 319 | { | 319 | { |
| 320 | __get_cpu_var(last_jiffy) = get_tb(); | 320 | __get_cpu_var(last_jiffy) = get_tb_or_rtc(); |
| 321 | snapshot_purr(); | 321 | snapshot_purr(); |
| 322 | } | 322 | } |
| 323 | 323 | ||
| @@ -684,6 +684,8 @@ void timer_interrupt(struct pt_regs * regs) | |||
| 684 | 684 | ||
| 685 | write_seqlock(&xtime_lock); | 685 | write_seqlock(&xtime_lock); |
| 686 | tb_next_jiffy = tb_last_jiffy + tb_ticks_per_jiffy; | 686 | tb_next_jiffy = tb_last_jiffy + tb_ticks_per_jiffy; |
| 687 | if (__USE_RTC() && tb_next_jiffy >= 1000000000) | ||
| 688 | tb_next_jiffy -= 1000000000; | ||
| 687 | if (per_cpu(last_jiffy, cpu) >= tb_next_jiffy) { | 689 | if (per_cpu(last_jiffy, cpu) >= tb_next_jiffy) { |
| 688 | tb_last_jiffy = tb_next_jiffy; | 690 | tb_last_jiffy = tb_next_jiffy; |
| 689 | do_timer(1); | 691 | do_timer(1); |
| @@ -977,7 +979,7 @@ void __init time_init(void) | |||
| 977 | tb_to_ns_scale = scale; | 979 | tb_to_ns_scale = scale; |
| 978 | tb_to_ns_shift = shift; | 980 | tb_to_ns_shift = shift; |
| 979 | /* Save the current timebase to pretty up CONFIG_PRINTK_TIME */ | 981 | /* Save the current timebase to pretty up CONFIG_PRINTK_TIME */ |
| 980 | boot_tb = get_tb(); | 982 | boot_tb = get_tb_or_rtc(); |
| 981 | 983 | ||
| 982 | tm = get_boot_time(); | 984 | tm = get_boot_time(); |
| 983 | 985 | ||
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index cef01e4e8989..213fa31ac537 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
| @@ -98,6 +98,18 @@ static struct vdso_patch_def vdso_patches[] = { | |||
| 98 | CPU_FTR_USE_TB, 0, | 98 | CPU_FTR_USE_TB, 0, |
| 99 | "__kernel_gettimeofday", NULL | 99 | "__kernel_gettimeofday", NULL |
| 100 | }, | 100 | }, |
| 101 | { | ||
| 102 | CPU_FTR_USE_TB, 0, | ||
| 103 | "__kernel_clock_gettime", NULL | ||
| 104 | }, | ||
| 105 | { | ||
| 106 | CPU_FTR_USE_TB, 0, | ||
| 107 | "__kernel_clock_getres", NULL | ||
| 108 | }, | ||
| 109 | { | ||
| 110 | CPU_FTR_USE_TB, 0, | ||
| 111 | "__kernel_get_tbfreq", NULL | ||
| 112 | }, | ||
| 101 | }; | 113 | }; |
| 102 | 114 | ||
| 103 | /* | 115 | /* |
