lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220622170219.GA6978@Mahakal>
Date:   Wed, 22 Jun 2022 22:32:20 +0530
From:   "<Vishal Badole>" <badolevishal1116@...il.com>
To:     Stephen Boyd <sboyd@...nel.org>, mturquette@...libre.com,
        linux-clk@...r.kernel.org, linux-kernel@...r.kernel.org
Cc:     chinmoyghosh2001@...il.com, mintupatel89@...il.com
Subject: Re: [PATCH] Common clock: ​​To list
 active consumers of clocks


>From f2e9d78bd0f135206fbfbf2e0178a5782b972939 Mon Sep 17 00:00:00 2001
From: Vishal Badole <badolevishal1116@...il.com>
Date: Tue, 21 Jun 2022 09:55:51 +0530
Subject: [PATCH] Common clock: To list active consumers of clocks

This feature lists the name of clocks and their consumer devices.
Using this feature user can easily check which device is using a
perticular clock. Consumers without dev_id are listed as no_dev_id.

Co-developed-by: Chinmoy Ghosh <chinmoyghosh2001@...il.com>
Signed-off-by: Chinmoy Ghosh <chinmoyghosh2001@...il.com>
Co-developed-by: Mintu Patel <mintupatel89@...il.com>
Signed-off-by: Mintu Patel <mintupatel89@...il.com>
Acked-by: Vimal Kumar <vimal.kumar32@...il.com>
Signed-off-by: Vishal Badole <badolevishal1116@...il.com>
---
 drivers/clk/clk.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index ed11918..b191009 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -3018,6 +3018,63 @@ static int clk_summary_show(struct seq_file *s, void *data)
 }
 DEFINE_SHOW_ATTRIBUTE(clk_summary);
 
+static void clk_consumer_show_one(struct seq_file *s, struct clk_core *core, int level)
+{
+	struct clk *clk_user;
+	const char *consumer;
+
+	hlist_for_each_entry(clk_user, &core->clks, clks_node) {
+		if (!clk_user->dev_id)
+			consumer = "no_dev_id";
+		else
+			consumer = clk_user->dev_id;
+
+		seq_printf(s, "%*s%-*s %30s %5d %7d ",
+			   level * 3 + 1, "",
+			   30 - level * 3, clk_user->core->name, consumer,
+			   clk_user->core->enable_count, clk_user->core->prepare_count);
+
+		if (clk_user->core->ops->is_enabled)
+			seq_printf(s, " %8c\n", clk_core_is_enabled(clk_user->core) ? 'Y' : 'N');
+		else if (!clk_user->core->ops->enable)
+			seq_printf(s, " %8c\n", 'Y');
+		else
+			seq_printf(s, " %8c\n", '?');
+	}
+}
+
+static void clk_consumer_show_subtree(struct seq_file *s, struct clk_core *c, int level)
+{
+	struct clk_core *child;
+
+	clk_consumer_show_one(s, c, level);
+
+	hlist_for_each_entry(child, &c->children, child_node)
+		clk_consumer_show_subtree(s, child, level + 1);
+}
+
+static int clk_consumer_show(struct seq_file *s, void *data)
+{
+	struct clk_core *c;
+	struct hlist_head **lists = (struct hlist_head **)s->private;
+
+	seq_puts(s, "                                                              enable   prepare   hardware\n");
+	seq_puts(s, "   clock                                       consumer        count     count     enable\n");
+	seq_puts(s, "-----------------------------------------------------------------------------------------\n");
+	clk_prepare_lock();
+
+	/*Traversing Linked List to print clock consumer*/
+
+	for (; *lists; lists++)
+		hlist_for_each_entry(c, *lists, child_node)
+			clk_consumer_show_subtree(s, c, 0);
+
+	clk_prepare_unlock();
+
+	return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(clk_consumer);
+
 static void clk_dump_one(struct seq_file *s, struct clk_core *c, int level)
 {
 	int phase;
@@ -3437,6 +3494,8 @@ static int __init clk_debug_init(void)
 			    &clk_summary_fops);
 	debugfs_create_file("clk_orphan_dump", 0444, rootdir, &orphan_list,
 			    &clk_dump_fops);
+	debugfs_create_file("clk_consumer", 0444, rootdir, &all_lists,
+			    &clk_consumer_fops);
 
 	mutex_lock(&clk_debug_lock);
 	hlist_for_each_entry(core, &clk_debug_list, debug_node)
-- 
2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ