diff options
-rw-r--r-- | arch/ia64/kernel/time.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/time.c | 5 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/vsyscall_64.c | 5 | ||||
-rw-r--r-- | include/linux/clocksource.h | 6 | ||||
-rw-r--r-- | kernel/time/timekeeping.c | 6 |
6 files changed, 17 insertions, 12 deletions
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index 4990495d7531..a35c661e5e89 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -473,7 +473,7 @@ void update_vsyscall_tz(void) | |||
473 | { | 473 | { |
474 | } | 474 | } |
475 | 475 | ||
476 | void update_vsyscall(struct timespec *wall, struct clocksource *c) | 476 | void update_vsyscall(struct timespec *wall, struct clocksource *c, u32 mult) |
477 | { | 477 | { |
478 | unsigned long flags; | 478 | unsigned long flags; |
479 | 479 | ||
@@ -481,7 +481,7 @@ void update_vsyscall(struct timespec *wall, struct clocksource *c) | |||
481 | 481 | ||
482 | /* copy fsyscall clock data */ | 482 | /* copy fsyscall clock data */ |
483 | fsyscall_gtod_data.clk_mask = c->mask; | 483 | fsyscall_gtod_data.clk_mask = c->mask; |
484 | fsyscall_gtod_data.clk_mult = c->mult; | 484 | fsyscall_gtod_data.clk_mult = mult; |
485 | fsyscall_gtod_data.clk_shift = c->shift; | 485 | fsyscall_gtod_data.clk_shift = c->shift; |
486 | fsyscall_gtod_data.clk_fsys_mmio = c->fsys_mmio; | 486 | fsyscall_gtod_data.clk_fsys_mmio = c->fsys_mmio; |
487 | fsyscall_gtod_data.clk_cycle_last = c->cycle_last; | 487 | fsyscall_gtod_data.clk_cycle_last = c->cycle_last; |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index a136a11c490d..39713312fbc7 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -828,7 +828,8 @@ static cycle_t timebase_read(struct clocksource *cs) | |||
828 | return (cycle_t)get_tb(); | 828 | return (cycle_t)get_tb(); |
829 | } | 829 | } |
830 | 830 | ||
831 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | 831 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, |
832 | u32 mult) | ||
832 | { | 833 | { |
833 | u64 t2x, stamp_xsec; | 834 | u64 t2x, stamp_xsec; |
834 | 835 | ||
@@ -841,7 +842,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | |||
841 | 842 | ||
842 | /* XXX this assumes clock->shift == 22 */ | 843 | /* XXX this assumes clock->shift == 22 */ |
843 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ | 844 | /* 4611686018 ~= 2^(20+64-22) / 1e9 */ |
844 | t2x = (u64) clock->mult * 4611686018ULL; | 845 | t2x = (u64) mult * 4611686018ULL; |
845 | stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; | 846 | stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC; |
846 | do_div(stamp_xsec, 1000000000); | 847 | do_div(stamp_xsec, 1000000000); |
847 | stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; | 848 | stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 34162a0b2caa..68e1ecf5ebab 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -214,7 +214,8 @@ struct clocksource * __init clocksource_default_clock(void) | |||
214 | return &clocksource_tod; | 214 | return &clocksource_tod; |
215 | } | 215 | } |
216 | 216 | ||
217 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | 217 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, |
218 | u32 mult) | ||
218 | { | 219 | { |
219 | if (clock != &clocksource_tod) | 220 | if (clock != &clocksource_tod) |
220 | return; | 221 | return; |
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c index 8cb4974ff599..62f39d79b775 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c | |||
@@ -73,7 +73,8 @@ void update_vsyscall_tz(void) | |||
73 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); | 73 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); |
74 | } | 74 | } |
75 | 75 | ||
76 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | 76 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, |
77 | u32 mult) | ||
77 | { | 78 | { |
78 | unsigned long flags; | 79 | unsigned long flags; |
79 | 80 | ||
@@ -82,7 +83,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) | |||
82 | vsyscall_gtod_data.clock.vread = clock->vread; | 83 | vsyscall_gtod_data.clock.vread = clock->vread; |
83 | vsyscall_gtod_data.clock.cycle_last = clock->cycle_last; | 84 | vsyscall_gtod_data.clock.cycle_last = clock->cycle_last; |
84 | vsyscall_gtod_data.clock.mask = clock->mask; | 85 | vsyscall_gtod_data.clock.mask = clock->mask; |
85 | vsyscall_gtod_data.clock.mult = clock->mult; | 86 | vsyscall_gtod_data.clock.mult = mult; |
86 | vsyscall_gtod_data.clock.shift = clock->shift; | 87 | vsyscall_gtod_data.clock.shift = clock->shift; |
87 | vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec; | 88 | vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec; |
88 | vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; | 89 | vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 83d2fbd81b93..95e4995d9987 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -280,10 +280,12 @@ extern struct clocksource * __init __weak clocksource_default_clock(void); | |||
280 | extern void clocksource_mark_unstable(struct clocksource *cs); | 280 | extern void clocksource_mark_unstable(struct clocksource *cs); |
281 | 281 | ||
282 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL | 282 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL |
283 | extern void update_vsyscall(struct timespec *ts, struct clocksource *c); | 283 | extern void |
284 | update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult); | ||
284 | extern void update_vsyscall_tz(void); | 285 | extern void update_vsyscall_tz(void); |
285 | #else | 286 | #else |
286 | static inline void update_vsyscall(struct timespec *ts, struct clocksource *c) | 287 | static inline void |
288 | update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult) | ||
287 | { | 289 | { |
288 | } | 290 | } |
289 | 291 | ||
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index c3a4e2907eaa..2a6d3e3e2c3e 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
@@ -177,7 +177,7 @@ void timekeeping_leap_insert(int leapsecond) | |||
177 | { | 177 | { |
178 | xtime.tv_sec += leapsecond; | 178 | xtime.tv_sec += leapsecond; |
179 | wall_to_monotonic.tv_sec -= leapsecond; | 179 | wall_to_monotonic.tv_sec -= leapsecond; |
180 | update_vsyscall(&xtime, timekeeper.clock); | 180 | update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult); |
181 | } | 181 | } |
182 | 182 | ||
183 | #ifdef CONFIG_GENERIC_TIME | 183 | #ifdef CONFIG_GENERIC_TIME |
@@ -337,7 +337,7 @@ int do_settimeofday(struct timespec *tv) | |||
337 | timekeeper.ntp_error = 0; | 337 | timekeeper.ntp_error = 0; |
338 | ntp_clear(); | 338 | ntp_clear(); |
339 | 339 | ||
340 | update_vsyscall(&xtime, timekeeper.clock); | 340 | update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult); |
341 | 341 | ||
342 | write_sequnlock_irqrestore(&xtime_lock, flags); | 342 | write_sequnlock_irqrestore(&xtime_lock, flags); |
343 | 343 | ||
@@ -811,7 +811,7 @@ void update_wall_time(void) | |||
811 | update_xtime_cache(nsecs); | 811 | update_xtime_cache(nsecs); |
812 | 812 | ||
813 | /* check to see if there is a new clocksource to use */ | 813 | /* check to see if there is a new clocksource to use */ |
814 | update_vsyscall(&xtime, timekeeper.clock); | 814 | update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult); |
815 | } | 815 | } |
816 | 816 | ||
817 | /** | 817 | /** |