提交 e7e6f462 编写于 作者: L Leonard Crestez 提交者: Linus Torvalds

scripts/gdb: print cached rate in lx-clk-summary

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.comSigned-off-by: NLeonard 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: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 66d5c7c6
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
import gdb import gdb
import sys import sys
from linux import utils, lists from linux import utils, lists, constants
clk_core_type = utils.CachedType("struct clk_core") clk_core_type = utils.CachedType("struct clk_core")
...@@ -16,27 +16,34 @@ def clk_core_for_each_child(hlist_head): ...@@ -16,27 +16,34 @@ def clk_core_for_each_child(hlist_head):
class LxClkSummary(gdb.Command): 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): def __init__(self):
super(LxClkSummary, self).__init__("lx-clk-summary", gdb.COMMAND_DATA) super(LxClkSummary, self).__init__("lx-clk-summary", gdb.COMMAND_DATA)
def show_subtree(self, clk, level): 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, "", level * 3 + 1, "",
30 - level * 3, 30 - level * 3,
clk['name'].string(), clk['name'].string(),
clk['enable_count'], clk['enable_count'],
clk['prepare_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']): for child in clk_core_for_each_child(clk['children']):
self.show_subtree(child, level + 1) self.show_subtree(child, level + 1)
def invoke(self, arg, from_tty): def invoke(self, arg, from_tty):
gdb.write(" enable prepare protect\n") gdb.write(" enable prepare protect \n")
gdb.write(" clock count count count\n") gdb.write(" clock count count count rate \n")
gdb.write("---------------------------------------------------------\n") gdb.write("------------------------------------------------------------------------\n")
for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_root_list")): for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_root_list")):
self.show_subtree(clk, 0) self.show_subtree(clk, 0)
for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_orphan_list")): for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_orphan_list")):
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
* *
*/ */
#include <linux/clk-provider.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/hrtimer.h> #include <linux/hrtimer.h>
#include <linux/mount.h> #include <linux/mount.h>
...@@ -38,6 +39,9 @@ ...@@ -38,6 +39,9 @@
import gdb import gdb
/* linux/clk-provider.h */
LX_GDBPARSED(CLK_GET_RATE_NOCACHE)
/* linux/fs.h */ /* linux/fs.h */
LX_VALUE(SB_RDONLY) LX_VALUE(SB_RDONLY)
LX_VALUE(SB_SYNCHRONOUS) LX_VALUE(SB_SYNCHRONOUS)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册