Re: [PATCH] clk: Fix race condition between clk_set_parent and clk_enable()

From: Saravana Kannan
Date: Thu May 16 2013 - 00:17:18 EST


On 05/15/2013 12:24 PM, Ulf Hansson wrote:
On 1 May 2013 06:42, Saravana Kannan <skannan@xxxxxxxxxxxxxx> wrote:

<snip>

- /* migrate prepare */
- if (clk->prepare_count)
+ /*
+ * Migrate prepare state between parents and prevent race with
+ * clk_enable().
+ *
+ * If the clock is not prepared, then a race with
+ * clk_enable/disable() is impossible since we already have the
+ * prepare lock (future calls to clk_enable() need to be preceded by
+ * a clk_prepare()).
+ *
+ * If the clock is prepared, migrate the prepared state to the new
+ * parent and also protect against a race with clk_enable() by
+ * forcing the clock and the new parent on. This ensures that all
+ * future calls to clk_enable() are practically NOPs with respect to
+ * hardware and software states.
+ */

Maybe an additional note about that since CLK_SET_PARENT_GATE is a
prerequisite for doing migration of "prepare", we also interpreted
this flags as it is acceptable to enable the clock(s) in this context.

Done. Sent v2 patch.

<snip>


Looks good! Thanks for having another round to fixup this kind of
tricky code. :-)

Thanks :-)

Acked-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>


Thanks again.

-Saravana

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
hosted by The Linux Foundation
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/