* [sh4] fix sh_tmu clocksource following recent nohz changes.
svn path=/dists/sid/linux-2.6/; revision=15823
This commit is contained in:
parent
219331eabc
commit
ce47b79657
|
@ -7,6 +7,9 @@ linux-2.6 (2.6.32-16) UNRELEASED; urgency=low
|
||||||
[ Ben Hutchings ]
|
[ Ben Hutchings ]
|
||||||
* Add stable 2.6.32.15
|
* Add stable 2.6.32.15
|
||||||
|
|
||||||
|
[ Aurelien Jarno ]
|
||||||
|
* [sh4] fix sh_tmu clocksource following recent nohz changes.
|
||||||
|
|
||||||
-- dann frazier <dannf@debian.org> Tue, 01 Jun 2010 09:23:57 -0600
|
-- dann frazier <dannf@debian.org> Tue, 01 Jun 2010 09:23:57 -0600
|
||||||
|
|
||||||
linux-2.6 (2.6.32-15) unstable; urgency=low
|
linux-2.6 (2.6.32-15) unstable; urgency=low
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
From: Aurelien Jarno <aurelien@aurel32.net>
|
||||||
|
Date: Mon, 31 May 2010 21:45:48 +0000 (+0000)
|
||||||
|
Subject: clocksource: sh_tmu: compute mult and shift before registration
|
||||||
|
|
||||||
|
clocksource: sh_tmu: compute mult and shift before registration
|
||||||
|
|
||||||
|
Since commit 98962465ed9e6ea99c38e0af63fe1dcb5a79dc25 ("nohz: Prevent
|
||||||
|
clocksource wrapping during idle"), the CPU of an R2D board never goes
|
||||||
|
to idle. This commit assumes that mult and shift are assigned before
|
||||||
|
the clocksource is registered. As a consequence the safe maximum sleep
|
||||||
|
time is negative and the CPU never goes into idle.
|
||||||
|
|
||||||
|
This patch fixes the problem by moving mult and shift initialization
|
||||||
|
from sh_tmu_clocksource_enable() to sh_tmu_register_clocksource().
|
||||||
|
|
||||||
|
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
|
||||||
|
Cc: stable@kernel.org
|
||||||
|
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c
|
||||||
|
index 8e44e14..de71590 100644
|
||||||
|
--- a/drivers/clocksource/sh_tmu.c
|
||||||
|
+++ b/drivers/clocksource/sh_tmu.c
|
||||||
|
@@ -199,16 +199,8 @@ static cycle_t sh_tmu_clocksource_read(struct clocksource *cs)
|
||||||
|
static int sh_tmu_clocksource_enable(struct clocksource *cs)
|
||||||
|
{
|
||||||
|
struct sh_tmu_priv *p = cs_to_sh_tmu(cs);
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- ret = sh_tmu_enable(p);
|
||||||
|
- if (ret)
|
||||||
|
- return ret;
|
||||||
|
|
||||||
|
- /* TODO: calculate good shift from rate and counter bit width */
|
||||||
|
- cs->shift = 10;
|
||||||
|
- cs->mult = clocksource_hz2mult(p->rate, cs->shift);
|
||||||
|
- return 0;
|
||||||
|
+ return sh_tmu_enable(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sh_tmu_clocksource_disable(struct clocksource *cs)
|
||||||
|
@@ -228,6 +220,16 @@
|
||||||
|
cs->disable = sh_tmu_clocksource_disable;
|
||||||
|
cs->mask = CLOCKSOURCE_MASK(32);
|
||||||
|
cs->flags = CLOCK_SOURCE_IS_CONTINUOUS;
|
||||||
|
+
|
||||||
|
+ /* clk_get_rate() needs an enabled clock */
|
||||||
|
+ clk_enable(p->clk);
|
||||||
|
+ /* channel will be configured at parent clock / 4 */
|
||||||
|
+ p->rate = clk_get_rate(p->clk) / 4;
|
||||||
|
+ clk_disable(p->clk);
|
||||||
|
+ /* TODO: calculate good shift from rate and counter bit width */
|
||||||
|
+ cs->shift = 10;
|
||||||
|
+ cs->mult = clocksource_hz2mult(p->rate, cs->shift);
|
||||||
|
+
|
||||||
|
pr_info("sh_tmu: %s used as clock source\n", cs->name);
|
||||||
|
clocksource_register(cs);
|
||||||
|
return 0;
|
|
@ -1,3 +1,4 @@
|
||||||
+ bugfix/parisc/clear-fp-exception-flag-on-SIGFPE.patch
|
+ bugfix/parisc/clear-fp-exception-flag-on-SIGFPE.patch
|
||||||
- bugfix/all/revert-percpu-stable-changes-2.patch
|
- bugfix/all/revert-percpu-stable-changes-2.patch
|
||||||
+ bugfix/all/stable/2.6.32.15.patch
|
+ bugfix/all/stable/2.6.32.15.patch
|
||||||
|
+ bugfix/sh4/fix-sh_tmu.patch
|
||||||
|
|
Loading…
Reference in New Issue