[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0jy3gztTTfR_UOv_yX5w9Uj2ZqEmhmNZ63WVnFHM2rRcw@mail.gmail.com>
Date: Tue, 21 Oct 2025 19:52:17 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Changwoo Min <changwoo@...lia.com>
Cc: lukasz.luba@....com, rafael@...nel.org, len.brown@...el.com,
pavel@...nel.org, christian.loehle@....com, tj@...nel.org,
kernel-dev@...lia.com, linux-pm@...r.kernel.org, sched-ext@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 00/10] PM: EM: Add netlink support for the energy model
On Tue, Oct 21, 2025 at 12:09 AM Changwoo Min <changwoo@...lia.com> wrote:
>
> Addressed all the comments from Lukasz and rebased the code to the head
> of the linus tree.
>
> There is a need to access the energy model from the userspace. One such
> example is the sched_ext schedulers [1]. The userspace part of the
> sched_ext schedules could feed the (post-processed) energy-model
> information to the BPF part of the scheduler.
>
> Currently, debugfs is the only way to read the energy model from userspace;
> however, it lacks proper notification mechanisms when a performance domain
> and its associated energy model change.
>
> This patch set introduces a generic netlink for the energy model, as
> discussed in [2]. It allows a userspace program to read the performance
> domain and its energy model. It notifies the userspace program when a
> performance domain is created or deleted or its energy model is updated
> through a multicast interface.
>
> Specifically, it supports two commands:
> - EM_CMD_GET_PDS: Get the list of information for all performance
> domains.
> - EM_CMD_GET_PD_TABLE: Get the energy model table of a performance
> domain.
>
> Also, it supports three notification events:
> - EM_CMD_PD_CREATED: When a performance domain is created.
> - EM_CMD_PD_DELETED: When a performance domain is deleted.
> - EM_CMD_PD_UPDATED: When the energy model table of a performance domain
> is updated.
>
> This can be tested using the tool, tools/net/ynl/pyynl/cli.py, for example,
> with the following commands:
>
> $> tools/net/ynl/pyynl/cli.py \
> --spec Documentation/netlink/specs/em.yaml \
> --do get-pds
> $> tools/net/ynl/pyynl/cli.py \
> --spec Documentation/netlink/specs/em.yaml \
> --do get-pd-table --json '{"pd-id": 0}'
> $> tools/net/ynl/pyynl/cli.py \
> --spec Documentation/netlink/specs/em.yaml \
> --subscribe event --sleep 10
>
> [1] https://lwn.net/Articles/922405/
> [2] https://lore.kernel.org/lkml/a82423bc-8c38-4d57-93da-c4f20011cc92@arm.com/
> [3] https://lore.kernel.org/lkml/202506140306.tuIoz8rN-lkp@intel.com/#t
>
> ChangeLog v5 -> v6:
> - Fix two problems reported by the kernel test robot.
> - Conditionally include the iterator/accessor code for the performance
> domain when both CONFIG_ENERGY_MODEL and CONFIG_NET are set to avoid
> the compilation errors (patch 5).
> - Remove an unused variable, `ret`, in em_notify_pd_deleted() to avoid
> a warning (patch 8).
>
> ChangeLog v4 -> v5:
> - Rebase the code to the head of the linus tree.
> - Remove the redundant em_check_capacity_update() call from
> em_dev_register_pd_no_update().
> - Move patch 3 ("PM: EM: Add an iterator and accessor for the
> performance domain") after patch 5 ("PM: EM: Add a skeleton code for
> netlink notification").
> - Move the declaration of for_each_em_perf_domain() and
> em_perf_domain_get_by_id() from energy_model.h to em_netlink.h.
> - Fix a typo in patch 7 ("PM: EM: Implement
> em_nl_get_pd_table_doit()") and change the variable declaration
> order in em_nl_get_pd_table_doit() following the reverse Christmas
> tree order.
> - Remove the empty skeleton code of em_notify_pd_created/updated() from
> patch 8 ("PM: EM: Implement em_notify_pd_deleted()") and introduce
> them later where they are actually implemented.
> - Change the return type of em_notify_pd_created/updated/deleted()
> from int to void, since we don't check it anyway.
>
> ChangeLog v3 -> v4:
> - Move patches [3-5] to the first.
> - Remove the ending period (".") from all of the patch subjects.
> - Rebase the code to v6.17-rc4.
>
> ChangeLog v2 -> v3:
> - Properly initialize a return variable in
> em_notify_pd_created/updated() at an error path (09/10), reported by
> the kernel test robot [3].
> - Remove redundant initialization of a return variable in
> em_notify_pd_deleted() at an error path (08/10).
>
> ChangeLog v1 -> v2:
> - Use YNL to generate boilerplate code. Overhaul the naming conventions
> (command, event, notification, attribute) to follow the typical
> conventions of other YNL-based netlink implementations.
> - Calculate the exact message size instead of using NLMSG_GOODSIZE
> when allocating a message (genlmsg_new). This avoids the reallocation
> of a message.
> - Remove an unnecessary function, em_netlink_exit(), and initialize the
> netlink (em_netlink_init) at em_netlink.c without touching energy_model.c.
>
> Changwoo Min (10):
> PM: EM: Assign a unique ID when creating a performance domain
> PM: EM: Expose the ID of a performance domain via debugfs
> PM: EM: Add em.yaml and autogen files
> PM: EM: Add a skeleton code for netlink notification
> PM: EM: Add an iterator and accessor for the performance domain
> PM: EM: Implement em_nl_get_pds_doit()
> PM: EM: Implement em_nl_get_pd_table_doit()
> PM: EM: Implement em_notify_pd_deleted()
> PM: EM: Implement em_notify_pd_created/updated()
> PM: EM: Notify an event when the performance domain changes
>
> Documentation/netlink/specs/em.yaml | 113 ++++++++++
> MAINTAINERS | 3 +
> include/linux/energy_model.h | 4 +
> include/uapi/linux/energy_model.h | 62 ++++++
> kernel/power/Makefile | 5 +-
> kernel/power/em_netlink.c | 309 ++++++++++++++++++++++++++++
> kernel/power/em_netlink.h | 39 ++++
> kernel/power/em_netlink_autogen.c | 48 +++++
> kernel/power/em_netlink_autogen.h | 23 +++
> kernel/power/energy_model.c | 85 +++++++-
> 10 files changed, 689 insertions(+), 2 deletions(-)
> create mode 100644 Documentation/netlink/specs/em.yaml
> create mode 100644 include/uapi/linux/energy_model.h
> create mode 100644 kernel/power/em_netlink.c
> create mode 100644 kernel/power/em_netlink.h
> create mode 100644 kernel/power/em_netlink_autogen.c
> create mode 100644 kernel/power/em_netlink_autogen.h
>
> --
Is there any particular reason why you have not picked up the tags
received by the previous iteration?
Powered by blists - more mailing lists