Hi Reinette, On 8/15/23 17:50, Reinette Chatre wrote: > Hi Babu, > > Please do note that the subject is no longer accurate. Changing to x86/resctrl: Move default group file creation during mount > > On 8/11/2023 1:10 PM, Babu Moger wrote: >> The resctrl default control group is created during kernel init time. >> If the new files are to be added to the default group based on the mount >> option, then each file needs to be created separately and call >> kernfs_activate() again. >> >> This can be avoided if all the files are created during the mount and >> destroyed during the umount. So, move the default group creation >> in rdt_get_tree() and removal in rdt_kill_sb(). > > How about a slight rewording (please feel free to change): > > The default resource group and its files are created during kernel > init time. Upcoming changes will make some resctrl files optional > based on a mount parameter. If optional files are to be added to the > default group based on the mount option, then each new file needs to > be created separately and call kernfs_activate() again. > > Create all files of the default resource group during resctrl > mount, destroyed during unmount, to avoid scattering resctrl > file addition across two separate code flows. Sure. Looks good. thanks > > >> >> Suggested-by: Reinette Chatre <reinette.chatre@xxxxxxxxx> >> Signed-off-by: Babu Moger <babu.moger@xxxxxxx> >> --- >> arch/x86/kernel/cpu/resctrl/internal.h | 1 + >> arch/x86/kernel/cpu/resctrl/rdtgroup.c | 50 +++++++++++++++++--------------- >> 2 files changed, 27 insertions(+), 24 deletions(-) >> >> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h >> index 37800724e002..2bd92c0c3b0c 100644 >> --- a/arch/x86/kernel/cpu/resctrl/internal.h >> +++ b/arch/x86/kernel/cpu/resctrl/internal.h >> @@ -602,5 +602,6 @@ void rdt_domain_reconfigure_cdp(struct rdt_resource *r); >> void __init thread_throttle_mode_init(void); >> void __init mbm_config_rftype_init(const char *config); >> void rdt_staged_configs_clear(void); >> +int rdtgroup_setup_root(struct rdt_fs_context *ctx); >> >> #endif /* _ASM_X86_RESCTRL_INTERNAL_H */ >> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> index 0805fac04401..a7453c93bad4 100644 >> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> @@ -2521,10 +2521,14 @@ static int rdt_get_tree(struct fs_context *fc) >> goto out; >> } >> >> - ret = rdt_enable_ctx(ctx); >> + ret = rdtgroup_setup_root(ctx); >> if (ret) >> goto out; >> >> + ret = rdt_enable_ctx(ctx); >> + if (ret) >> + goto out_root; >> + >> ret = schemata_list_create(); >> if (ret) { >> schemata_list_destroy(); >> @@ -2533,6 +2537,12 @@ static int rdt_get_tree(struct fs_context *fc) >> >> closid_init(); >> >> + ret = rdtgroup_add_files(rdtgroup_default.kn, RFTYPE_CTRL_BASE); >> + if (ret) >> + goto out_schemata_free; >> + >> + kernfs_activate(rdtgroup_default.kn); >> + >> ret = rdtgroup_create_info_dir(rdtgroup_default.kn); >> if (ret < 0) >> goto out_schemata_free; >> @@ -2589,6 +2599,8 @@ static int rdt_get_tree(struct fs_context *fc) >> schemata_list_destroy(); >> out_ctx: >> rdt_disable_ctx(ctx); >> +out_root: >> + kernfs_destroy_root(rdt_root); > > Please ensure that all rdtgroup_setup_root() cleanup is done > here. It seems to me that rdtgroup_default.kn can be left pointing > to freed memory. Since this cleanup is done multiple places (here > and rdt_kill_sb()) it may help to create a helper. Ok. Sure. Will do. -- Thanks Babu Moger