diff options
author | Francesco VIRLINZI <francesco.virlinzi@st.com> | 2009-03-13 04:08:01 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-03-16 07:11:00 -0400 |
commit | 50cca715a64b66ccf173767d94d4020ea0a6129c (patch) | |
tree | 56f26236a191e98825dca07e69835e42ee019d1d /arch/sh | |
parent | e9edb3fec2260b5a64e9ca9e09160b74f1b106e3 (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')
-rw-r--r-- | arch/sh/kernel/cpu/clock.c | 4 |
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 | } |