lkml.org 
[lkml]   [2020]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 14/19] mm: memcg/slab: deprecate memcg_kmem_get_cache()
    Date
    The memcg_kmem_get_cache() function became really trivial, so
    let's just inline it into the single call point:
    memcg_slab_pre_alloc_hook().

    It will make the code less bulky and can also help the compiler
    to generate a better code.

    Signed-off-by: Roman Gushchin <guro@fb.com>
    ---
    include/linux/memcontrol.h | 2 --
    mm/memcontrol.c | 25 +------------------------
    mm/slab.h | 11 +++++++++--
    mm/slab_common.c | 2 +-
    4 files changed, 11 insertions(+), 29 deletions(-)

    diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
    index 87e6da5015b3..5de89a767496 100644
    --- a/include/linux/memcontrol.h
    +++ b/include/linux/memcontrol.h
    @@ -1425,8 +1425,6 @@ static inline void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
    }
    #endif

    -struct kmem_cache *memcg_kmem_get_cache(struct kmem_cache *cachep);
    -
    #ifdef CONFIG_MEMCG_KMEM
    int __memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp,
    unsigned int nr_pages);
    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index 55fd42155a37..bd58b91631f7 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -373,7 +373,7 @@ void memcg_put_cache_ids(void)

    /*
    * A lot of the calls to the cache allocation functions are expected to be
    - * inlined by the compiler. Since the calls to memcg_kmem_get_cache are
    + * inlined by the compiler. Since the calls to memcg_slab_pre_alloc_hook() are
    * conditional to this static branch, we'll have to allow modules that does
    * kmem_cache_alloc and the such to see this symbol as well
    */
    @@ -2898,29 +2898,6 @@ static void memcg_free_cache_id(int id)
    ida_simple_remove(&memcg_cache_ida, id);
    }

    -/**
    - * memcg_kmem_get_cache: select memcg or root cache for allocation
    - * @cachep: the original global kmem cache
    - *
    - * Return the kmem_cache we're supposed to use for a slab allocation.
    - *
    - * If the cache does not exist yet, if we are the first user of it, we
    - * create it asynchronously in a workqueue and let the current allocation
    - * go through with the original cache.
    - */
    -struct kmem_cache *memcg_kmem_get_cache(struct kmem_cache *cachep)
    -{
    - struct kmem_cache *memcg_cachep;
    -
    - memcg_cachep = READ_ONCE(cachep->memcg_params.memcg_cache);
    - if (unlikely(!memcg_cachep)) {
    - queue_work(system_wq, &cachep->memcg_params.work);
    - return cachep;
    - }
    -
    - return memcg_cachep;
    -}
    -
    /**
    * __memcg_kmem_charge: charge a number of kernel pages to a memcg
    * @memcg: memory cgroup to charge
    diff --git a/mm/slab.h b/mm/slab.h
    index a4e115cb8bdc..cbee6cb0a331 100644
    --- a/mm/slab.h
    +++ b/mm/slab.h
    @@ -332,9 +332,16 @@ static inline struct kmem_cache *memcg_slab_pre_alloc_hook(struct kmem_cache *s,
    if (memcg_kmem_bypass())
    return s;

    - cachep = memcg_kmem_get_cache(s);
    - if (is_root_cache(cachep))
    + cachep = READ_ONCE(s->memcg_params.memcg_cache);
    + if (unlikely(!cachep)) {
    + /*
    + * If memcg cache does not exist yet, we schedule it's
    + * asynchronous creation and let the current allocation
    + * go through with the root cache.
    + */
    + queue_work(system_wq, &s->memcg_params.work);
    return s;
    + }

    objcg = get_obj_cgroup_from_current();
    if (!objcg)
    diff --git a/mm/slab_common.c b/mm/slab_common.c
    index 10aa2acb84ca..f8874a159637 100644
    --- a/mm/slab_common.c
    +++ b/mm/slab_common.c
    @@ -568,7 +568,7 @@ void memcg_create_kmem_cache(struct kmem_cache *root_cache)
    }

    /*
    - * Since readers won't lock (see memcg_kmem_get_cache()), we need a
    + * Since readers won't lock (see memcg_slab_pre_alloc_hook()), we need a
    * barrier here to ensure nobody will see the kmem_cache partially
    * initialized.
    */
    --
    2.25.3
    \
     
     \ /
      Last update: 2020-04-22 22:48    [W:2.821 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site