• Vlastimil Babka's avatar
    mm: Convert struct page to struct slab in functions used by other subsystems · 40f3bf0c
    Vlastimil Babka authored
    KASAN, KFENCE and memcg interact with SLAB or SLUB internals through
    functions nearest_obj(), obj_to_index() and objs_per_slab() that use
    struct page as parameter. This patch converts it to struct slab
    including all callers, through a coccinelle semantic patch.
    
    // Options: --include-headers --no-includes --smpl-spacing include/linux/slab_def.h include/linux/slub_def.h mm/slab.h mm/kasan/*.c mm/kfence/kfence_test.c mm/memcontrol.c mm/slab.c mm/slub.c
    // Note: needs coccinelle 1.1.1 to avoid breaking whitespace
    
    @@
    @@
    
    -objs_per_slab_page(
    +objs_per_slab(
     ...
     )
     { ... }
    
    @@
    @@
    
    -objs_per_slab_page(
    +objs_per_slab(
     ...
     )
    
    @@
    identifier fn =~ "obj_to_index|objs_per_slab";
    @@
    
     fn(...,
    -   const struct page *page
    +   const struct slab *slab
        ,...)
     {
    <...
    (
    - page_address(page)
    + slab_address(slab)
    |
    - page
    + slab
    )
    ...>
     }
    
    @@
    identifier fn =~ "nearest_obj";
    @@
    
     fn(...,
    -   struct page *page
    +   const struct slab *slab
        ,...)
     {
    <...
    (
    - page_address(page)
    + slab_address(slab)
    |
    - page
    + slab
    )
    ...>
     }
    
    @@
    identifier fn =~ "nearest_obj|obj_to_index|objs_per_slab";
    expression E;
    @@
    
     fn(...,
    (
    - slab_page(E)
    + E
    |
    - virt_to_page(E)
    + virt_to_slab(E)
    |
    - virt_to_head_page(E)
    + virt_to_slab(E)
    |
    - page
    + page_slab(page)
    )
      ,...)
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarAndrey Konovalov <andreyknvl@gmail.com>
    Reviewed-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Julia Lawall <julia.lawall@inria.fr>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: <kasan-dev@googlegroups.com>
    Cc: <cgroups@vger.kernel.org>
    40f3bf0c
slab_def.h 3.02 KB