aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/time.c')
-rw-r--r--arch/ia64/kernel/time.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index aa7be020a904..c6ecb97151a2 100644
--- a/arch/ia64/kernel/time.c
+++ b/arch/ia64/kernel/time.c
@@ -430,30 +430,32 @@ void update_vsyscall_tz(void)
430{ 430{
431} 431}
432 432
433void update_vsyscall_old(struct timespec *wall, struct timespec *wtm, 433void update_vsyscall(struct timekeeper *tk)
434 struct clocksource *c, u32 mult, u64 cycle_last)
435{ 434{
436 write_seqcount_begin(&fsyscall_gtod_data.seq); 435 write_seqcount_begin(&fsyscall_gtod_data.seq);
437 436
438 /* copy fsyscall clock data */ 437 /* copy vsyscall data */
439 fsyscall_gtod_data.clk_mask = c->mask; 438 fsyscall_gtod_data.clk_mask = tk->tkr_mono.mask;
440 fsyscall_gtod_data.clk_mult = mult; 439 fsyscall_gtod_data.clk_mult = tk->tkr_mono.mult;
441 fsyscall_gtod_data.clk_shift = c->shift; 440 fsyscall_gtod_data.clk_shift = tk->tkr_mono.shift;
442 fsyscall_gtod_data.clk_fsys_mmio = c->archdata.fsys_mmio; 441 fsyscall_gtod_data.clk_fsys_mmio = tk->tkr_mono.clock->archdata.fsys_mmio;
443 fsyscall_gtod_data.clk_cycle_last = cycle_last; 442 fsyscall_gtod_data.clk_cycle_last = tk->tkr_mono.cycle_last;
444 443
445 /* copy kernel time structures */ 444 fsyscall_gtod_data.wall_time.sec = tk->xtime_sec;
446 fsyscall_gtod_data.wall_time.tv_sec = wall->tv_sec; 445 fsyscall_gtod_data.wall_time.snsec = tk->tkr_mono.xtime_nsec;
447 fsyscall_gtod_data.wall_time.tv_nsec = wall->tv_nsec; 446
448 fsyscall_gtod_data.monotonic_time.tv_sec = wtm->tv_sec 447 fsyscall_gtod_data.monotonic_time.sec = tk->xtime_sec
449 + wall->tv_sec; 448 + tk->wall_to_monotonic.tv_sec;
450 fsyscall_gtod_data.monotonic_time.tv_nsec = wtm->tv_nsec 449 fsyscall_gtod_data.monotonic_time.snsec = tk->tkr_mono.xtime_nsec
451 + wall->tv_nsec; 450 + ((u64)tk->wall_to_monotonic.tv_nsec
451 << tk->tkr_mono.shift);
452 452
453 /* normalize */ 453 /* normalize */
454 while (fsyscall_gtod_data.monotonic_time.tv_nsec >= NSEC_PER_SEC) { 454 while (fsyscall_gtod_data.monotonic_time.snsec >=
455 fsyscall_gtod_data.monotonic_time.tv_nsec -= NSEC_PER_SEC; 455 (((u64)NSEC_PER_SEC) << tk->tkr_mono.shift)) {
456 fsyscall_gtod_data.monotonic_time.tv_sec++; 456 fsyscall_gtod_data.monotonic_time.snsec -=
457 ((u64)NSEC_PER_SEC) << tk->tkr_mono.shift;
458 fsyscall_gtod_data.monotonic_time.sec++;
457 } 459 }
458 460
459 write_seqcount_end(&fsyscall_gtod_data.seq); 461 write_seqcount_end(&fsyscall_gtod_data.seq);