mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
PM: EM: Add em.yaml and autogen files
Add a generic netlink spec in YAML format and autogenerate boilerplate
code using ynl-regen.sh to introduce a generic netlink for the energy
model. 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.
Finally, update MAINTAINERS to include new files.
Signed-off-by: Changwoo Min <changwoo@igalia.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Link: https://patch.msgid.link/20251020220914.320832-4-changwoo@igalia.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
committed by
Rafael J. Wysocki
parent
ee50b8bb6b
commit
bd26631ccd
113
Documentation/netlink/specs/em.yaml
Normal file
113
Documentation/netlink/specs/em.yaml
Normal file
@@ -0,0 +1,113 @@
|
||||
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||
|
||||
name: em
|
||||
|
||||
doc: |
|
||||
Energy model netlink interface to notify its changes.
|
||||
|
||||
protocol: genetlink
|
||||
|
||||
uapi-header: linux/energy_model.h
|
||||
|
||||
attribute-sets:
|
||||
-
|
||||
name: pds
|
||||
attributes:
|
||||
-
|
||||
name: pd
|
||||
type: nest
|
||||
nested-attributes: pd
|
||||
multi-attr: true
|
||||
-
|
||||
name: pd
|
||||
attributes:
|
||||
-
|
||||
name: pad
|
||||
type: pad
|
||||
-
|
||||
name: pd-id
|
||||
type: u32
|
||||
-
|
||||
name: flags
|
||||
type: u64
|
||||
-
|
||||
name: cpus
|
||||
type: string
|
||||
-
|
||||
name: pd-table
|
||||
attributes:
|
||||
-
|
||||
name: pd-id
|
||||
type: u32
|
||||
-
|
||||
name: ps
|
||||
type: nest
|
||||
nested-attributes: ps
|
||||
multi-attr: true
|
||||
-
|
||||
name: ps
|
||||
attributes:
|
||||
-
|
||||
name: pad
|
||||
type: pad
|
||||
-
|
||||
name: performance
|
||||
type: u64
|
||||
-
|
||||
name: frequency
|
||||
type: u64
|
||||
-
|
||||
name: power
|
||||
type: u64
|
||||
-
|
||||
name: cost
|
||||
type: u64
|
||||
-
|
||||
name: flags
|
||||
type: u64
|
||||
|
||||
operations:
|
||||
list:
|
||||
-
|
||||
name: get-pds
|
||||
attribute-set: pds
|
||||
doc: Get the list of information for all performance domains.
|
||||
do:
|
||||
reply:
|
||||
attributes:
|
||||
- pd
|
||||
-
|
||||
name: get-pd-table
|
||||
attribute-set: pd-table
|
||||
doc: Get the energy model table of a performance domain.
|
||||
do:
|
||||
request:
|
||||
attributes:
|
||||
- pd-id
|
||||
reply:
|
||||
attributes:
|
||||
- pd-id
|
||||
- ps
|
||||
-
|
||||
name: pd-created
|
||||
doc: A performance domain is created.
|
||||
notify: get-pd-table
|
||||
mcgrp: event
|
||||
-
|
||||
name: pd-updated
|
||||
doc: A performance domain is updated.
|
||||
notify: get-pd-table
|
||||
mcgrp: event
|
||||
-
|
||||
name: pd-deleted
|
||||
doc: A performance domain is deleted.
|
||||
attribute-set: pd-table
|
||||
event:
|
||||
attributes:
|
||||
- pd-id
|
||||
mcgrp: event
|
||||
|
||||
mcast-groups:
|
||||
list:
|
||||
-
|
||||
name: event
|
||||
@@ -9181,6 +9181,9 @@ S: Maintained
|
||||
F: kernel/power/energy_model.c
|
||||
F: include/linux/energy_model.h
|
||||
F: Documentation/power/energy-model.rst
|
||||
F: Documentation/netlink/specs/em.yaml
|
||||
F: include/uapi/linux/energy_model.h
|
||||
F: kernel/power/em_netlink_autogen.*
|
||||
|
||||
EPAPR HYPERVISOR BYTE CHANNEL DEVICE DRIVER
|
||||
M: Laurentiu Tudor <laurentiu.tudor@nxp.com>
|
||||
|
||||
62
include/uapi/linux/energy_model.h
Normal file
62
include/uapi/linux/energy_model.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
|
||||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/em.yaml */
|
||||
/* YNL-GEN uapi header */
|
||||
|
||||
#ifndef _UAPI_LINUX_ENERGY_MODEL_H
|
||||
#define _UAPI_LINUX_ENERGY_MODEL_H
|
||||
|
||||
#define EM_FAMILY_NAME "em"
|
||||
#define EM_FAMILY_VERSION 1
|
||||
|
||||
enum {
|
||||
EM_A_PDS_PD = 1,
|
||||
|
||||
__EM_A_PDS_MAX,
|
||||
EM_A_PDS_MAX = (__EM_A_PDS_MAX - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
EM_A_PD_PAD = 1,
|
||||
EM_A_PD_PD_ID,
|
||||
EM_A_PD_FLAGS,
|
||||
EM_A_PD_CPUS,
|
||||
|
||||
__EM_A_PD_MAX,
|
||||
EM_A_PD_MAX = (__EM_A_PD_MAX - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
EM_A_PD_TABLE_PD_ID = 1,
|
||||
EM_A_PD_TABLE_PS,
|
||||
|
||||
__EM_A_PD_TABLE_MAX,
|
||||
EM_A_PD_TABLE_MAX = (__EM_A_PD_TABLE_MAX - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
EM_A_PS_PAD = 1,
|
||||
EM_A_PS_PERFORMANCE,
|
||||
EM_A_PS_FREQUENCY,
|
||||
EM_A_PS_POWER,
|
||||
EM_A_PS_COST,
|
||||
EM_A_PS_FLAGS,
|
||||
|
||||
__EM_A_PS_MAX,
|
||||
EM_A_PS_MAX = (__EM_A_PS_MAX - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
EM_CMD_GET_PDS = 1,
|
||||
EM_CMD_GET_PD_TABLE,
|
||||
EM_CMD_PD_CREATED,
|
||||
EM_CMD_PD_UPDATED,
|
||||
EM_CMD_PD_DELETED,
|
||||
|
||||
__EM_CMD_MAX,
|
||||
EM_CMD_MAX = (__EM_CMD_MAX - 1)
|
||||
};
|
||||
|
||||
#define EM_MCGRP_EVENT "event"
|
||||
|
||||
#endif /* _UAPI_LINUX_ENERGY_MODEL_H */
|
||||
48
kernel/power/em_netlink_autogen.c
Normal file
48
kernel/power/em_netlink_autogen.c
Normal file
@@ -0,0 +1,48 @@
|
||||
// SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/em.yaml */
|
||||
/* YNL-GEN kernel source */
|
||||
|
||||
#include <net/netlink.h>
|
||||
#include <net/genetlink.h>
|
||||
|
||||
#include "em_netlink_autogen.h"
|
||||
|
||||
#include <uapi/linux/energy_model.h>
|
||||
|
||||
/* EM_CMD_GET_PD_TABLE - do */
|
||||
static const struct nla_policy em_get_pd_table_nl_policy[EM_A_PD_TABLE_PD_ID + 1] = {
|
||||
[EM_A_PD_TABLE_PD_ID] = { .type = NLA_U32, },
|
||||
};
|
||||
|
||||
/* Ops table for em */
|
||||
static const struct genl_split_ops em_nl_ops[] = {
|
||||
{
|
||||
.cmd = EM_CMD_GET_PDS,
|
||||
.doit = em_nl_get_pds_doit,
|
||||
.flags = GENL_CMD_CAP_DO,
|
||||
},
|
||||
{
|
||||
.cmd = EM_CMD_GET_PD_TABLE,
|
||||
.doit = em_nl_get_pd_table_doit,
|
||||
.policy = em_get_pd_table_nl_policy,
|
||||
.maxattr = EM_A_PD_TABLE_PD_ID,
|
||||
.flags = GENL_CMD_CAP_DO,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct genl_multicast_group em_nl_mcgrps[] = {
|
||||
[EM_NLGRP_EVENT] = { "event", },
|
||||
};
|
||||
|
||||
struct genl_family em_nl_family __ro_after_init = {
|
||||
.name = EM_FAMILY_NAME,
|
||||
.version = EM_FAMILY_VERSION,
|
||||
.netnsok = true,
|
||||
.parallel_ops = true,
|
||||
.module = THIS_MODULE,
|
||||
.split_ops = em_nl_ops,
|
||||
.n_split_ops = ARRAY_SIZE(em_nl_ops),
|
||||
.mcgrps = em_nl_mcgrps,
|
||||
.n_mcgrps = ARRAY_SIZE(em_nl_mcgrps),
|
||||
};
|
||||
23
kernel/power/em_netlink_autogen.h
Normal file
23
kernel/power/em_netlink_autogen.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
|
||||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/em.yaml */
|
||||
/* YNL-GEN kernel header */
|
||||
|
||||
#ifndef _LINUX_EM_GEN_H
|
||||
#define _LINUX_EM_GEN_H
|
||||
|
||||
#include <net/netlink.h>
|
||||
#include <net/genetlink.h>
|
||||
|
||||
#include <uapi/linux/energy_model.h>
|
||||
|
||||
int em_nl_get_pds_doit(struct sk_buff *skb, struct genl_info *info);
|
||||
int em_nl_get_pd_table_doit(struct sk_buff *skb, struct genl_info *info);
|
||||
|
||||
enum {
|
||||
EM_NLGRP_EVENT,
|
||||
};
|
||||
|
||||
extern struct genl_family em_nl_family;
|
||||
|
||||
#endif /* _LINUX_EM_GEN_H */
|
||||
Reference in New Issue
Block a user