aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/cpu
diff options
context:
space:
mode:
authorFrancesco VIRLINZI <francesco.virlinzi@st.com>2009-03-13 04:08:01 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-03-16 07:11:00 -0400
commit50cca715a64b66ccf173767d94d4020ea0a6129c (patch)
tree56f26236a191e98825dca07e69835e42ee019d1d /arch/sh/kernel/cpu
parente9edb3fec2260b5a64e9ca9e09160b74f1b106e3 (diff)
sh: clkfwk: Safer resume from hibernation.
This patch fixes a possible problem in the resume from hibenration. It temporaneally saves the clk->rate on the stack to avoid any possible change during the clk->set_parent(..) call. Signed-off-by: Francesco Virlinzi <francesco.virlinzi@st.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/cpu')
-rw-r--r--arch/sh/kernel/cpu/clock.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c
index 3209a8740fa4..1dc896483b59 100644
--- a/arch/sh/kernel/cpu/clock.c
+++ b/arch/sh/kernel/cpu/clock.c
@@ -372,12 +372,14 @@ static int clks_sysdev_suspend(struct sys_device *dev, pm_message_t state)
372 if (prev_state.event == PM_EVENT_FREEZE) { 372 if (prev_state.event == PM_EVENT_FREEZE) {
373 list_for_each_entry(clkp, &clock_list, node) 373 list_for_each_entry(clkp, &clock_list, node)
374 if (likely(clkp->ops)) { 374 if (likely(clkp->ops)) {
375 unsigned long rate = clkp->rate;
376
375 if (likely(clkp->ops->set_parent)) 377 if (likely(clkp->ops->set_parent))
376 clkp->ops->set_parent(clkp, 378 clkp->ops->set_parent(clkp,
377 clkp->parent); 379 clkp->parent);
378 if (likely(clkp->ops->set_rate)) 380 if (likely(clkp->ops->set_rate))
379 clkp->ops->set_rate(clkp, 381 clkp->ops->set_rate(clkp,
380 clkp->rate, NO_CHANGE); 382 rate, NO_CHANGE);
381 else if (likely(clkp->ops->recalc)) 383 else if (likely(clkp->ops->recalc))
382 clkp->ops->recalc(clkp); 384 clkp->ops->recalc(clkp);
383 } 385 }