Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 496eadf8 authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Stephen Boyd
Browse files

clk: Use lockdep asserts to find missing hold of prepare_lock



Add lockdep asserts for holding the prepare_lock to all functions
marking this as a requirement in description. Add this to private and
exported functions so all locking misuse could be detected during
debugging.

Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: default avatarMichael Turquette <mturquette@linaro.org>
parent c517d838
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -480,6 +480,8 @@ static void clk_unprepare_unused_subtree(struct clk_core *clk)
{
	struct clk_core *child;

	lockdep_assert_held(&prepare_lock);

	hlist_for_each_entry(child, &clk->children, child_node)
		clk_unprepare_unused_subtree(child);

@@ -503,6 +505,8 @@ static void clk_disable_unused_subtree(struct clk_core *clk)
	struct clk_core *child;
	unsigned long flags;

	lockdep_assert_held(&prepare_lock);

	hlist_for_each_entry(child, &clk->children, child_node)
		clk_disable_unused_subtree(child);

@@ -1106,6 +1110,8 @@ static unsigned long clk_core_round_rate_nolock(struct clk_core *clk,
	struct clk_core *parent;
	struct clk_hw *parent_hw;

	lockdep_assert_held(&prepare_lock);

	if (!clk)
		return 0;

@@ -1245,6 +1251,8 @@ static void __clk_recalc_accuracies(struct clk_core *clk)
	unsigned long parent_accuracy = 0;
	struct clk_core *child;

	lockdep_assert_held(&prepare_lock);

	if (clk->parent)
		parent_accuracy = clk->parent->accuracy;

@@ -1318,6 +1326,8 @@ static void __clk_recalc_rates(struct clk_core *clk, unsigned long msg)
	unsigned long parent_rate = 0;
	struct clk_core *child;

	lockdep_assert_held(&prepare_lock);

	old_rate = clk->rate;

	if (clk->parent)
@@ -1525,6 +1535,8 @@ static int __clk_speculate_rates(struct clk_core *clk,
	unsigned long new_rate;
	int ret = NOTIFY_DONE;

	lockdep_assert_held(&prepare_lock);

	new_rate = clk_recalc(clk, parent_rate);

	/* abort rate change if a driver returns NOTIFY_BAD or NOTIFY_STOP */
@@ -2488,6 +2500,8 @@ static void __clk_release(struct kref *ref)
	struct clk_core *clk = container_of(ref, struct clk_core, ref);
	int i = clk->num_parents;

	lockdep_assert_held(&prepare_lock);

	kfree(clk->parents);
	while (--i >= 0)
		kfree_const(clk->parent_names[i]);