[PATCH v7 07/19] fs/resctrl: Introduce resctrl_set_kmode_support() to register supported modes
From: Babu Moger
Date: Wed Nov 11 2026 - 18:19:39 EST
Architectures may support different kernel modes that need to be exposed to
user space via resctrl filesystem.
Initialize the resctrl_kmode data structure and add
resctrl_set_kmode_support() to allow architecture to register its supported
kernel modes. This is preparatory infrastructure for future kernel mode
support in resctrl.
Signed-off-by: Babu Moger <babu.moger@xxxxxxx>
---
v7: Moved the static initialization for resctrl_kmode in here as it is used
here first.
Updated the changelog and code comments.
v6: Use resctrl_kmode.kmode_sup after the struct flatten. Drop duplicate
kernel-doc from the .c definition and place the function next to
resctrl_kmode_init(). Rewrite changelog (not a bugfix).
v5: New patch split from resctrl_kmode_cfg initialization. Register modes
in resctrl_kmode_cfg.caps.kmode_sup using RESCTRL_INHERIT_USER and
RESCTRL_ASSIGN_GLOBAL_ENABLE_PER_CPU. Ignore out-of-range mode values.
v4: New patch to initialize supported kernel modes.
https://lore.kernel.org/lkml/737a4228-52fb-4583-ac64-8efe79c107e6@xxxxxxxxx/
---
fs/resctrl/rdtgroup.c | 14 ++++++++++++++
include/linux/resctrl.h | 12 ++++++++++++
2 files changed, 26 insertions(+)
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index 443b41a4d467..28bd4c4d98f2 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -76,6 +76,14 @@ static void rdtgroup_destroy_root(void);
struct dentry *debugfs_resctrl;
+static struct resctrl_kmode_cfg resctrl_kmode = {
+ .supported = { BIT(RESCTRL_INHERIT_USER) },
+ .active = RESCTRL_INHERIT_USER,
+ .ctrl = KMODE_ASSIGN,
+ .mon = KMODE_ASSIGN,
+ .rdtgrp = NULL,
+};
+
/*
* Memory bandwidth monitoring event to use for the default CTRL_MON group
* and each new CTRL_MON group created by the user. Only relevant when
@@ -2297,6 +2305,12 @@ static void io_alloc_init(void)
}
}
+void resctrl_set_kmode_support(enum resctrl_kernel_mode kmode)
+{
+ if (kmode < RESCTRL_NUM_KERNEL_MODES)
+ __set_bit(kmode, resctrl_kmode.supported);
+}
+
void resctrl_file_fflags_init(const char *config, unsigned long fflags)
{
struct rftype *rft;
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index e43415ae6e0e..519c28c63bc7 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -741,6 +741,18 @@ enum resctrl_kernel_mode {
#define RESCTRL_NUM_KERNEL_MODES (RESCTRL_KMODE_LAST + 1)
+/**
+ * resctrl_set_kmode_support() - Register a supported kernel mode
+ * @kmode: Kernel mode supported by the architecture.
+ *
+ * %RESCTRL_INHERIT_USER is a default mode and does not need to be
+ * registered.
+ *
+ * Architectures use this interface during resctrl initialization to
+ * advertise supported kernel modes.
+ */
+void resctrl_set_kmode_support(enum resctrl_kernel_mode kmode);
+
/**
* resctrl_arch_configure_kmode_global() - Program RESCTRL_GLOBAL_ENABLE_PER_CPU
*
--
2.43.0