Skip to content

Commit a25cbd0

Browse files
Magnus DammKAGA-KOKO
authored andcommitted
clocksource: setup mult_orig in clocksource_enable()
Setup clocksource mult_orig in clocksource_enable(). Clocksource drivers can save power by using keeping the device clock disabled while the clocksource is unused. In practice this means that the enable() and disable() callbacks perform clk_enable() and clk_disable(). The enable() callback may also use clk_get_rate() to get the clock rate from the clock framework. This information can then be used to calculate the shift and mult variables. Currently the mult_orig variable is setup from mult at registration time only. This is conflicting with the above case since the clock is disabled and the mult variable is not yet calculated at the time of registration. Moving the mult_orig setup code to clocksource_enable() allows us to both handle the common case with no enable() callback and the mult-changed-after-enable() case. [ Impact: allow dynamic clock source usage ] Signed-off-by: Magnus Damm <[email protected]> LKML-Reference: <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]>
1 parent 091438d commit a25cbd0

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

include/linux/clocksource.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,15 @@ static inline cycle_t clocksource_read(struct clocksource *cs)
288288
*/
289289
static inline int clocksource_enable(struct clocksource *cs)
290290
{
291-
return cs->enable ? cs->enable(cs) : 0;
291+
int ret = 0;
292+
293+
if (cs->enable)
294+
ret = cs->enable(cs);
295+
296+
/* save mult_orig on enable */
297+
cs->mult_orig = cs->mult;
298+
299+
return ret;
292300
}
293301

294302
/**

kernel/time/clocksource.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -402,9 +402,6 @@ int clocksource_register(struct clocksource *c)
402402
unsigned long flags;
403403
int ret;
404404

405-
/* save mult_orig on registration */
406-
c->mult_orig = c->mult;
407-
408405
spin_lock_irqsave(&clocksource_lock, flags);
409406
ret = clocksource_enqueue(c);
410407
if (!ret)

0 commit comments

Comments
 (0)