The resctrl subsystem tracks kernel mode configuration. Architectures need to register the supported kernel modes. Add resctrl_set_kmode_support() so an architecture can register supported kernel modes. Signed-off-by: Babu Moger --- 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@intel.com/ --- fs/resctrl/rdtgroup.c | 6 ++++++ include/linux/resctrl.h | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 7c39792be1fa..75b81d07a247 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2320,6 +2320,12 @@ static void resctrl_kmode_init(void) resctrl_kmode.mon = KMODE_ASSIGN; } +void resctrl_set_kmode_support(enum resctrl_kernel_mode kmode) +{ + if (kmode < RESCTRL_NUM_KERNEL_MODES) + __set_bit(kmode, resctrl_kmode.kmode_sup); +} + 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 dcb0beb847b6..5553f6301bd4 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -752,6 +752,21 @@ 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 registered by resctrl_kmode_init() and does + * not need to be registered again. + * + * Architectures use this interface during resctrl initialization to + * advertise supported kernel modes. Registration of a mode indicates + * architectural support only. The final decision to expose and enable + * a mode is made by resctrl based on system capabilities and + * configuration. + */ +void resctrl_set_kmode_support(enum resctrl_kernel_mode kmode); + /** * resctrl_arch_configure_kmode_global() - Program RESCTRL_GLOBAL_ENABLE_PER_CPU * -- 2.43.0