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 4990495d753..a35c661e5e8 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c @@ -473,7 +473,7 @@ void update_vsyscall_tz(void)  {  } -void update_vsyscall(struct timespec *wall, struct clocksource *c) +void update_vsyscall(struct timespec *wall, struct clocksource *c, u32 mult)  {          unsigned long flags; @@ -481,7 +481,7 @@ void update_vsyscall(struct timespec *wall, struct clocksource *c)          /* copy fsyscall clock data */          fsyscall_gtod_data.clk_mask = c->mask; -        fsyscall_gtod_data.clk_mult = c->mult; +        fsyscall_gtod_data.clk_mult = mult;          fsyscall_gtod_data.clk_shift = c->shift;          fsyscall_gtod_data.clk_fsys_mmio = c->fsys_mmio;          fsyscall_gtod_data.clk_cycle_last = c->cycle_last; diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index a136a11c490..39713312fbc 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)  	return (cycle_t)get_tb();  } -void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) +void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, +		     u32 mult)  {  	u64 t2x, stamp_xsec; @@ -841,7 +842,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)  	/* XXX this assumes clock->shift == 22 */  	/* 4611686018 ~= 2^(20+64-22) / 1e9 */ -	t2x = (u64) clock->mult * 4611686018ULL; +	t2x = (u64) mult * 4611686018ULL;  	stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC;  	do_div(stamp_xsec, 1000000000);  	stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC; diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 34162a0b2ca..68e1ecf5eba 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c @@ -214,7 +214,8 @@ struct clocksource * __init clocksource_default_clock(void)  	return &clocksource_tod;  } -void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) +void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, +		     u32 mult)  {  	if (clock != &clocksource_tod)  		return; diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c index 8cb4974ff59..62f39d79b77 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c @@ -73,7 +73,8 @@ void update_vsyscall_tz(void)  	write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags);  } -void update_vsyscall(struct timespec *wall_time, struct clocksource *clock) +void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, +		     u32 mult)  {  	unsigned long flags; @@ -82,7 +83,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)  	vsyscall_gtod_data.clock.vread = clock->vread;  	vsyscall_gtod_data.clock.cycle_last = clock->cycle_last;  	vsyscall_gtod_data.clock.mask = clock->mask; -	vsyscall_gtod_data.clock.mult = clock->mult; +	vsyscall_gtod_data.clock.mult = mult;  	vsyscall_gtod_data.clock.shift = clock->shift;  	vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec;  	vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 83d2fbd81b9..95e4995d998 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h @@ -280,10 +280,12 @@ extern struct clocksource * __init __weak clocksource_default_clock(void);  extern void clocksource_mark_unstable(struct clocksource *cs);  #ifdef CONFIG_GENERIC_TIME_VSYSCALL -extern void update_vsyscall(struct timespec *ts, struct clocksource *c); +extern void +update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult);  extern void update_vsyscall_tz(void);  #else -static inline void update_vsyscall(struct timespec *ts, struct clocksource *c) +static inline void +update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult)  {  } diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index c3a4e2907ea..2a6d3e3e2c3 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -177,7 +177,7 @@ void timekeeping_leap_insert(int leapsecond)  {  	xtime.tv_sec += leapsecond;  	wall_to_monotonic.tv_sec -= leapsecond; -	update_vsyscall(&xtime, timekeeper.clock); +	update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);  }  #ifdef CONFIG_GENERIC_TIME @@ -337,7 +337,7 @@ int do_settimeofday(struct timespec *tv)  	timekeeper.ntp_error = 0;  	ntp_clear(); -	update_vsyscall(&xtime, timekeeper.clock); +	update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);  	write_sequnlock_irqrestore(&xtime_lock, flags); @@ -811,7 +811,7 @@ void update_wall_time(void)  	update_xtime_cache(nsecs);  	/* check to see if there is a new clocksource to use */ -	update_vsyscall(&xtime, timekeeper.clock); +	update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);  }  /**  |