sh: clkfwk: Safer resume from hibernation.
authorFrancesco VIRLINZI <francesco.virlinzi@st.com>
Fri, 13 Mar 2009 08:08:01 +0000 (08:08 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 16 Mar 2009 11:11:00 +0000 (20:11 +0900)
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>
arch/sh/kernel/cpu/clock.c

index 3209a8740fa4c7aca749348ddd40a3f1efe3a4f1..1dc896483b591169bcf1254b70e4961ed3e88337 100644 (file)
@@ -372,12 +372,14 @@ static int clks_sysdev_suspend(struct sys_device *dev, pm_message_t state)
                if (prev_state.event == PM_EVENT_FREEZE) {
                        list_for_each_entry(clkp, &clock_list, node)
                                if (likely(clkp->ops)) {
+                                       unsigned long rate = clkp->rate;
+
                                        if (likely(clkp->ops->set_parent))
                                                clkp->ops->set_parent(clkp,
                                                        clkp->parent);
                                        if (likely(clkp->ops->set_rate))
                                                clkp->ops->set_rate(clkp,
-                                                       clkp->rate, NO_CHANGE);
+                                                       rate, NO_CHANGE);
                                        else if (likely(clkp->ops->recalc))
                                                clkp->ops->recalc(clkp);
                                        }