scripts/gdb: print cached rate in lx-clk-summary
authorLeonard Crestez <leonard.crestez@nxp.com>
Tue, 14 May 2019 22:46:17 +0000 (15:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 15 May 2019 02:52:52 +0000 (19:52 -0700)
The clk rate is always stored in clk_core but might be out of date and
require calls to update from hardware.

Deal with that case by printing a (c) suffix.

Link: http://lkml.kernel.org/r/1a474318982a5f0125f2360c4161029b17f56bd1.1556881728.git.leonard.crestez@nxp.com
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: Kieran Bingham <kbingham@kernel.org>
Cc: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/gdb/linux/clk.py
scripts/gdb/linux/constants.py.in

index 6bf71976b55d08e1dd192c65b1d1193ae5bd820b..061aecfa294e64a889556cdea5af3155b13ac32e 100644 (file)
@@ -5,7 +5,7 @@
 import gdb
 import sys
 
-from linux import utils, lists
+from linux import utils, lists, constants
 
 clk_core_type = utils.CachedType("struct clk_core")
 
@@ -16,27 +16,34 @@ def clk_core_for_each_child(hlist_head):
 
 
 class LxClkSummary(gdb.Command):
-    """Print Linux kernel log buffer."""
+    """Print clk tree summary
+
+Output is a subset of /sys/kernel/debug/clk/clk_summary
+
+No calls are made during printing, instead a (c) if printed after values which
+are cached and potentially out of date"""
 
     def __init__(self):
         super(LxClkSummary, self).__init__("lx-clk-summary", gdb.COMMAND_DATA)
 
     def show_subtree(self, clk, level):
-        gdb.write("%*s%-*s %7d %8d %8d\n" % (
+        gdb.write("%*s%-*s %7d %8d %8d %11lu%s\n" % (
                 level * 3 + 1, "",
                 30 - level * 3,
                 clk['name'].string(),
                 clk['enable_count'],
                 clk['prepare_count'],
-                clk['protect_count']))
+                clk['protect_count'],
+                clk['rate'],
+                '(c)' if clk['flags'] & constants.LX_CLK_GET_RATE_NOCACHE else '   '))
 
         for child in clk_core_for_each_child(clk['children']):
             self.show_subtree(child, level + 1)
 
     def invoke(self, arg, from_tty):
-        gdb.write("                                 enable  prepare  protect\n")
-        gdb.write("   clock                          count    count    count\n")
-        gdb.write("---------------------------------------------------------\n")
+        gdb.write("                                 enable  prepare  protect               \n")
+        gdb.write("   clock                          count    count    count        rate   \n")
+        gdb.write("------------------------------------------------------------------------\n")
         for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_root_list")):
             self.show_subtree(clk, 0)
         for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_orphan_list")):
index 76f46f427b96268eb254a937ea8b9650555f3331..1d73083da6cb2f6f36d10f8ef9af350cfaef2ee1 100644 (file)
@@ -12,6 +12,7 @@
  *
  */
 
+#include <linux/clk-provider.h>
 #include <linux/fs.h>
 #include <linux/hrtimer.h>
 #include <linux/mount.h>
@@ -38,6 +39,9 @@
 
 import gdb
 
+/* linux/clk-provider.h */
+LX_GDBPARSED(CLK_GET_RATE_NOCACHE)
+
 /* linux/fs.h */
 LX_VALUE(SB_RDONLY)
 LX_VALUE(SB_SYNCHRONOUS)