On 2/12/24 22:39, Suren Baghdasaryan wrote:
> Account slab allocations using codetag reference embedded into slabobj_ext.
> 
> Signed-off-by: Suren Baghdasaryan <[email protected]>
> Co-developed-by: Kent Overstreet <[email protected]>
> Signed-off-by: Kent Overstreet <[email protected]>
> ---
>  mm/slab.h | 26 ++++++++++++++++++++++++++
>  mm/slub.c |  5 +++++
>  2 files changed, 31 insertions(+)
> 
> diff --git a/mm/slab.h b/mm/slab.h
> index 224a4b2305fb..c4bd0d5348cb 100644
> --- a/mm/slab.h
> +++ b/mm/slab.h
> @@ -629,6 +629,32 @@ prepare_slab_obj_exts_hook(struct kmem_cache *s, gfp_t 
> flags, void *p)
>  
>  #endif /* CONFIG_SLAB_OBJ_EXT */
>  
> +#ifdef CONFIG_MEM_ALLOC_PROFILING
> +
> +static inline void alloc_tagging_slab_free_hook(struct kmem_cache *s, struct 
> slab *slab,
> +                                     void **p, int objects)
> +{
> +     struct slabobj_ext *obj_exts;
> +     int i;
> +
> +     obj_exts = slab_obj_exts(slab);
> +     if (!obj_exts)
> +             return;
> +
> +     for (i = 0; i < objects; i++) {
> +             unsigned int off = obj_to_index(s, slab, p[i]);
> +
> +             alloc_tag_sub(&obj_exts[off].ref, s->size);
> +     }
> +}
> +
> +#else
> +
> +static inline void alloc_tagging_slab_free_hook(struct kmem_cache *s, struct 
> slab *slab,
> +                                     void **p, int objects) {}
> +
> +#endif /* CONFIG_MEM_ALLOC_PROFILING */

You don't actually use the alloc_tagging_slab_free_hook() anywhere? I see
it's in the next patch, but logically should belong to this one.

> +
>  #ifdef CONFIG_MEMCG_KMEM
>  void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat,
>                    enum node_stat_item idx, int nr);
> diff --git a/mm/slub.c b/mm/slub.c
> index 9fd96238ed39..f4d5794c1e86 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -3821,6 +3821,11 @@ void slab_post_alloc_hook(struct kmem_cache *s,        
> struct obj_cgroup *objcg,
>                                        s->flags, init_flags);
>               kmsan_slab_alloc(s, p[i], init_flags);
>               obj_exts = prepare_slab_obj_exts_hook(s, flags, p[i]);
> +#ifdef CONFIG_MEM_ALLOC_PROFILING
> +             /* obj_exts can be allocated for other reasons */
> +             if (likely(obj_exts) && mem_alloc_profiling_enabled())
> +                     alloc_tag_add(&obj_exts->ref, current->alloc_tag, 
> s->size);
> +#endif
>       }
>  
>       memcg_slab_post_alloc_hook(s, objcg, flags, size, p);


Reply via email to