Re: [PATCH RFC 09/12] mm/slab: introduce slab_obj_ext_has_codetag()
"Vlastimil Babka (SUSE)" <[email protected]>
| Newsgroups | org.kernel.vger.cgroups,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 7/16/26 06:25, Suren Baghdasaryan wrote: > On Wed, Jul 15, 2026 at 3:11 AM Vlastimil Babka (SUSE) > <[email protected]> wrote: >> >> mem_alloc_profiling_enabled() allows evaluating (with a static key) if >> memory profiling is currently enabled. mem_profiling_support is a >> variable where false means it's not possible to enable it anymore, >> because the system was booted with "never" or it was later shut down. >> This is possible to query by mem_alloc_profiling_permanently_disabled(). >> >> To make slabobj_ext array size handling dynamic, we need a snapshot of >> mem_alloc_profiling_permanently_disabled() early in boot, so that's not >> affected by a later shutdown. We also need it to be static key based for >> performance. Neither mem_alloc_profiling_enabled() nor >> mem_alloc_profiling_permanently_disabled() satisfy this. >> >> Therefore introduce slab_obj_ext_has_codetag() with an underlying static >> key for that use case. Its state is made to reflect the result of >> mem_alloc_profiling_permanently_disabled() during kmem_cache_init(), >> which does happen after setup_early_mem_profiling(). >> >> Signed-off-by: Vlastimil Babka (SUSE) <[email protected]> > > Reviewed-by: Suren Baghdasaryan <[email protected]> Thanks! >> +/* >> + * Make sure the static key used by slab_obj_ext_has_codetag() reflects the >> + * value of !mem_alloc_profiling_permanently_disabled() >> + * >> + * Any later mem alloc profiling shutdown won't be reflected in the static key >> + * because obj_exts with codetags might already exist. >> + */ >> +static void __init slab_obj_ext_has_codetag_init(void) >> +{ >> + bool key_enabled = IS_ENABLED(CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT); > > nit: This seems a bit indirect. Reader needs to remember that > slab_obj_ext_has_codetag_key is initialized based on > CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT. Wouldn't below code be > simpler?: > > bool need_codetag = !mem_alloc_profiling_permanently_disabled(); > if (need_codetag != static_key_enabled(&slab_obj_ext_has_codetag_key)) { > if (need_codetag) > static_branch_enable(&slab_obj_ext_has_codetag_key); > else > static_branch_disable(&slab_obj_ext_has_codetag_key); > } > > It might be less performant but who cares, it's __init function used > only one time. Good idea, will do!