From: Valentin Schneider <valentin.schneider@arm.com>
To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: mingo@kernel.org, peterz@infradead.org,
vincent.guittot@linaro.org, dietmar.eggemann@arm.com,
morten.rasmussen@arm.com, Quentin Perret <qperret@google.com>
Subject: [PATCH v5 06/17] sched/debug: Output SD flag names rather than their values
Date: Wed, 12 Aug 2020 13:52:49 +0100 [thread overview]
Message-ID: <20200812125300.11889-7-valentin.schneider@arm.com> (raw)
In-Reply-To: <20200812125300.11889-1-valentin.schneider@arm.com>
Decoding the output of /proc/sys/kernel/sched_domain/cpu*/domain*/flags has
always been somewhat annoying, as one needs to go fetch the bit -> name
mapping from the source code itself. This encoding can be saved in a script
somewhere, but that isn't safe from flags being added, removed or even
shuffled around.
What matters for debugging purposes is to get *which* flags are set in a
given domain, their associated value is pretty much meaningless.
Make the sd flags debug file output flag names.
Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
---
kernel/sched/debug.c | 53 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 52 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 36c54265bb2b..e9e036a41c55 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -245,6 +245,57 @@ set_table_entry(struct ctl_table *entry,
entry->proc_handler = proc_handler;
}
+static int sd_ctl_doflags(struct ctl_table *table, int write,
+ void *buffer, size_t *lenp, loff_t *ppos)
+{
+ unsigned long flags = *(unsigned long *)table->data;
+ size_t data_size = 0;
+ size_t len = 0;
+ char *tmp;
+ int idx;
+
+ if (write)
+ return 0;
+
+ for_each_set_bit(idx, &flags, __SD_FLAG_CNT) {
+ char *name = sd_flag_debug[idx].name;
+
+ /* Name plus whitespace */
+ data_size += strlen(name) + 1;
+ }
+
+ if (*ppos > data_size) {
+ *lenp = 0;
+ return 0;
+ }
+
+ tmp = kcalloc(data_size + 1, sizeof(tmp), GFP_KERNEL);
+ for_each_set_bit(idx, &flags, __SD_FLAG_CNT) {
+ char *name = sd_flag_debug[idx].name;
+
+ len += snprintf(tmp + len, strlen(name) + 2, "%s ", name);
+ }
+
+ tmp += *ppos;
+ len -= *ppos;
+
+ if (len > *lenp)
+ len = *lenp;
+ if (len)
+ memcpy(buffer, tmp, len);
+ if (len < *lenp) {
+ ((char *)buffer)[len] = '\n';
+ len++;
+ }
+
+ *lenp = len;
+ *ppos += len;
+
+ kfree(tmp);
+
+ return 0;
+}
+
static struct ctl_table *
sd_alloc_ctl_domain_table(struct sched_domain *sd)
{
@@ -258,7 +309,7 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
set_table_entry(&table[2], "busy_factor", &sd->busy_factor, sizeof(int), 0644, proc_dointvec_minmax);
set_table_entry(&table[3], "imbalance_pct", &sd->imbalance_pct, sizeof(int), 0644, proc_dointvec_minmax);
set_table_entry(&table[4], "cache_nice_tries", &sd->cache_nice_tries, sizeof(int), 0644, proc_dointvec_minmax);
- set_table_entry(&table[5], "flags", &sd->flags, sizeof(int), 0444, proc_dointvec_minmax);
+ set_table_entry(&table[5], "flags", &sd->flags, sizeof(int), 0444, sd_ctl_doflags);
set_table_entry(&table[6], "max_newidle_lb_cost", &sd->max_newidle_lb_cost, sizeof(long), 0644, proc_doulongvec_minmax);
set_table_entry(&table[7], "name", sd->name, CORENAME_MAX_SIZE, 0444, proc_dostring);
/* &table[8] is terminator */
--
2.27.0
next prev parent reply other threads:[~2020-08-12 12:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-12 12:52 [PATCH v5 00/17] sched: Instrument sched domain flags Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 01/17] ARM, sched/topology: Remove SD_SHARE_POWERDOMAIN Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 02/17] ARM: Revert back to default scheduler topology Valentin Schneider
2020-08-13 19:16 ` Ingo Molnar
2020-08-13 22:27 ` Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 03/17] sched/topology: Split out SD_* flags declaration to its own file Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 04/17] sched/topology: Define and assign sched_domain flag metadata Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 05/17] sched/topology: Verify SD_* flags setup when sched_debug is on Valentin Schneider
2020-08-12 12:52 ` Valentin Schneider [this message]
2020-08-12 16:35 ` [PATCH v5 06/17] sched/debug: Output SD flag names rather than their values kernel test robot
2020-08-12 18:51 ` Valentin Schneider
2020-08-13 12:02 ` Luc Van Oostenryck
2020-08-13 13:13 ` Valentin Schneider
2020-08-12 17:59 ` kernel test robot
2020-08-12 17:59 ` [PATCH] sched/debug: fix noderef.cocci warnings kernel test robot
2020-08-12 18:52 ` Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 07/17] sched/topology: Introduce SD metaflag for flags needing > 1 groups Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 08/17] sched/topology: Use prebuilt SD flag degeneration mask Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 09/17] sched/topology: Remove SD_SERIALIZE degeneration special case Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 10/17] sched/topology: Propagate SD_ASYM_CPUCAPACITY upwards Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 11/17] sched/topology: Mark SD_PREFER_SIBLING as SDF_NEEDS_GROUPS Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 12/17] sched/topology: Mark SD_BALANCE_WAKE " Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 13/17] sched/topology: Mark SD_SERIALIZE " Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 14/17] sched/topology: Mark SD_ASYM_PACKING " Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 15/17] sched/topology: Mark SD_OVERLAP " Valentin Schneider
2020-08-12 12:52 ` [PATCH v5 16/17] sched/topology: Mark SD_NUMA " Valentin Schneider
2020-08-12 12:53 ` [PATCH v5 17/17] sched/topology: Expand use of SD_DEGENERATE_GROUPS_MASK to flags not needing groups Valentin Schneider
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200812125300.11889-7-valentin.schneider@arm.com \
--to=valentin.schneider@arm.com \
--cc=dietmar.eggemann@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=qperret@google.com \
--cc=vincent.guittot@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®