Skip to content

Commit d29b900

Browse files
multics69rafaeljw
authored andcommitted
PM: EM: Change cpus' type from string to u64 array in the EM YNL spec
Previously, the cpus attribute was a string format which was a "%*pb" stringification of a bitmap. That is not very consumable for a UAPI, so let’s change it to an u64 array of CPU ids. Suggested-by: Donald Hunter <donald.hunter@gmail.com> Reviewed-by: Lukasz Luba <lukasz.luba@arm.com> Reviewed-by: Donald Hunter <donald.hunter@gmail.com> Signed-off-by: Changwoo Min <changwoo@igalia.com> Link: https://patch.msgid.link/20260108053212.642478-4-changwoo@igalia.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent caa07a8 commit d29b900

2 files changed

Lines changed: 13 additions & 12 deletions

File tree

Documentation/netlink/specs/dev-energymodel.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ attribute-sets:
7373
enum: perf-domain-flags
7474
-
7575
name: cpus
76-
type: string
76+
type: u64
77+
multi-attr: true
7778
doc: >-
7879
CPUs that belong to this performance domain.
7980
-

kernel/power/em_netlink.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,14 @@
1717
#include "em_netlink.h"
1818
#include "em_netlink_autogen.h"
1919

20-
#define DEV_ENERGYMODEL_A_PERF_DOMAIN_CPUS_LEN 256
21-
2220
/*************************** Command encoding ********************************/
2321
static int __em_nl_get_pd_size(struct em_perf_domain *pd, void *data)
2422
{
25-
char cpus_buf[DEV_ENERGYMODEL_A_PERF_DOMAIN_CPUS_LEN];
23+
int nr_cpus, msg_sz, cpus_sz;
2624
int *tot_msg_sz = data;
27-
int msg_sz, cpus_sz;
2825

29-
cpus_sz = snprintf(cpus_buf, sizeof(cpus_buf), "%*pb",
30-
cpumask_pr_args(to_cpumask(pd->cpus)));
26+
nr_cpus = cpumask_weight(to_cpumask(pd->cpus));
27+
cpus_sz = nla_total_size_64bit(sizeof(u64)) * nr_cpus;
3128

3229
msg_sz = nla_total_size(0) +
3330
/* DEV_ENERGYMODEL_A_PERF_DOMAINS_PERF_DOMAIN */
@@ -44,9 +41,10 @@ static int __em_nl_get_pd_size(struct em_perf_domain *pd, void *data)
4441

4542
static int __em_nl_get_pd(struct em_perf_domain *pd, void *data)
4643
{
47-
char cpus_buf[DEV_ENERGYMODEL_A_PERF_DOMAIN_CPUS_LEN];
4844
struct sk_buff *msg = data;
45+
struct cpumask *cpumask;
4946
struct nlattr *entry;
47+
int cpu;
5048

5149
entry = nla_nest_start(msg,
5250
DEV_ENERGYMODEL_A_PERF_DOMAINS_PERF_DOMAIN);
@@ -61,10 +59,12 @@ static int __em_nl_get_pd(struct em_perf_domain *pd, void *data)
6159
pd->flags, DEV_ENERGYMODEL_A_PERF_DOMAIN_PAD))
6260
goto out_cancel_nest;
6361

64-
snprintf(cpus_buf, sizeof(cpus_buf), "%*pb",
65-
cpumask_pr_args(to_cpumask(pd->cpus)));
66-
if (nla_put_string(msg, DEV_ENERGYMODEL_A_PERF_DOMAIN_CPUS, cpus_buf))
67-
goto out_cancel_nest;
62+
cpumask = to_cpumask(pd->cpus);
63+
for_each_cpu(cpu, cpumask) {
64+
if (nla_put_u64_64bit(msg, DEV_ENERGYMODEL_A_PERF_DOMAIN_CPUS,
65+
cpu, DEV_ENERGYMODEL_A_PERF_DOMAIN_PAD))
66+
goto out_cancel_nest;
67+
}
6868

6969
nla_nest_end(msg, entry);
7070

0 commit comments

Comments
 (0)