Skip to content

Commit

Permalink
clocksource: Save mult_orig in clocksource_disable()
Browse files Browse the repository at this point in the history
To fix the common case where ->enable() does not set up
mult, make sure mult_orig is saved in mult on disable.

Also add comments to explain why we do this.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Cc: johnstul@us.ibm.com
Cc: lethal@linux-sh.org
Cc: akpm@linux-foundation.org
LKML-Reference: <20090618152432.10136.9932.sendpatchset@rx1.opensource.se>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Magnus Damm authored and Ingo Molnar committed Jul 31, 2009
1 parent 4be3bd7 commit c712184
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion include/linux/clocksource.h
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,12 @@ static inline int clocksource_enable(struct clocksource *cs)
if (cs->enable)
ret = cs->enable(cs);

/* save mult_orig on enable */
/*
* The frequency may have changed while the clocksource
* was disabled. If so the code in ->enable() must update
* the mult value to reflect the new frequency. Make sure
* mult_orig follows this change.
*/
cs->mult_orig = cs->mult;

return ret;
Expand All @@ -309,6 +314,13 @@ static inline int clocksource_enable(struct clocksource *cs)
*/
static inline void clocksource_disable(struct clocksource *cs)
{
/*
* Save mult_orig in mult so clocksource_enable() can
* restore the value regardless if ->enable() updates
* the value of mult or not.
*/
cs->mult = cs->mult_orig;

if (cs->disable)
cs->disable(cs);
}
Expand Down

0 comments on commit c712184

Please sign in to comment.