Thread (17 messages) 17 messages, 8 authors, 2014-08-27
DORMANTno replies
Revisions (12)
  1. v7 [diff vs current]
  2. v7 current
  3. v8 [diff vs current]
  4. v10 [diff vs current]
  5. v11 [diff vs current]
  6. v13 [diff vs current]
  7. v2 [diff vs current]
  8. v3 [diff vs current]
  9. v4 [diff vs current]
  10. v5 [diff vs current]
  11. v6 [diff vs current]
  12. v7 [diff vs current]

[PATCH v7 7/8] clk: per-user clock accounting for debug

From: Mike Turquette <hidden>
Date: 2014-08-27 20:54:10

Quoting Tomeu Vizoso (2014-08-18 08:30:32)
quoted hunk ↗ jump to hunk
@@ -936,10 +939,25 @@ EXPORT_SYMBOL_GPL(clk_provider_disable);
  */
 void clk_disable(struct clk *clk_user)
 {
+       struct clk_core *clk;
+       unsigned long flags;
+
        if (IS_ERR_OR_NULL(clk_user))
                return;
 
-       clk_provider_disable(clk_to_clk_core(clk_user));
+       clk = clk_to_clk_core(clk_user);
+
+       flags = clk_enable_lock();
+       if (!WARN(clk_user->enable_count == 0,
+                 "incorrect disable clk dev %s con %s last disabler %pF\n",
+                 clk_user->dev_id, clk_user->con_id, clk_user->last_disable)) {
+
+               clk_user->last_disable = __builtin_return_address(0);
+               clk_user->enable_count--;
+
+               __clk_disable(clk);
+       }
+       clk_enable_unlock(flags);
 }
 EXPORT_SYMBOL_GPL(clk_disable);
 
@@ -1000,10 +1018,22 @@ EXPORT_SYMBOL_GPL(clk_provider_enable);
  */
 int clk_enable(struct clk *clk_user)
 {
+       struct clk_core *clk;
+       unsigned long flags;
+       int ret;
+
        if (!clk_user)
                return 0;
 
-       return clk_provider_enable(clk_to_clk_core(clk_user));
+       clk = clk_to_clk_core(clk_user);
+
+       flags = clk_enable_lock();
+       ret = __clk_enable(clk);
+       if (!ret)
+               clk_user->enable_count++;
+       clk_enable_unlock(flags);
+
+       return ret;
 }
 EXPORT_SYMBOL_GPL(clk_enable);
 
While we're at it, why not do per-using accounting for clk_{un}prepare?

Regards,
Mike
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help