Re: [PATCH] mm, slub: place the trace before freeing memory in kmem_cache_free()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Oct 30, 2021 at 6:12 PM Yunfeng Ye <yeyunfeng@xxxxxxxxxx> wrote:
>
> After the memory is freed, it may be allocated by other CPUs and has
> been recorded by trace. So the timing sequence of the memory tracing is
> inaccurate.
>
> For example, we expect the following timing sequeuce:
>
>     CPU 0                 CPU 1
>
>   (1) alloc xxxxxx
>   (2) free  xxxxxx
>                          (3) alloc xxxxxx
>                          (4) free  xxxxxx
>
> However, the following timing sequence may occur:
>
>     CPU 0                 CPU 1
>
>   (1) alloc xxxxxx
>                          (2) alloc xxxxxx
>   (3) free  xxxxxx
>                          (4) free  xxxxxx
>
> So place the trace before freeing memory in kmem_cache_free().

Could you tell me what problem you have encountered
here?

Thanks.

>
> Signed-off-by: Yunfeng Ye <yeyunfeng@xxxxxxxxxx>
> ---
>  mm/slub.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 432145d7b4ec..427e62034c3f 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -3526,8 +3526,8 @@ void kmem_cache_free(struct kmem_cache *s, void *x)
>         s = cache_from_obj(s, x);
>         if (!s)
>                 return;
> -       slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_);
>         trace_kmem_cache_free(_RET_IP_, x, s->name);
> +       slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_);
>  }
>  EXPORT_SYMBOL(kmem_cache_free);
>
> --
> 2.27.0




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux