Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7121843 authored by Magnus Damm's avatar Magnus Damm Committed by Ingo Molnar
Browse files

clocksource: Save mult_orig in clocksource_disable()



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: default avatarMagnus 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: default avatarThomas Gleixner <tglx@linutronix.de>
parent 4be3bd78
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
}