diff options
Diffstat (limited to 'arch/ia64/kernel/time.c')
| -rw-r--r-- | arch/ia64/kernel/time.c | 40 |
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 | ||
| 433 | void update_vsyscall_old(struct timespec *wall, struct timespec *wtm, | 433 | void 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); |
