]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: memcg: add cache line padding to mem_cgroup_per_node
authorRoman Gushchin <roman.gushchin@linux.dev>
Mon, 1 Jul 2024 18:59:32 +0000 (18:59 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 10 Jul 2024 19:14:54 +0000 (12:14 -0700)
Memcg v1-specific fields serve a buffer function between read-mostly and
update often parts of the mem_cgroup_per_node structure.  If
CONFIG_MEMCG_V1 is not set and these fields are not present, an explicit
cacheline padding is needed.

Link: https://lkml.kernel.org/r/20240701185932.704807-2-roman.gushchin@linux.dev
Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
Suggested-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/memcontrol.h

index 8b5b3ddeba052fe50dba1e44ad50443a3100ee08..60418934827c7f9bc7c3eab377a7647292d61b2e 100644 (file)
@@ -95,14 +95,16 @@ struct mem_cgroup_per_node {
 #ifdef CONFIG_MEMCG_V1
        /*
         * Memcg-v1 only stuff in middle as buffer between read mostly fields
-        * and update often fields to avoid false sharing. Once v1 stuff is
-        * moved in a separate struct, an explicit padding is needed.
+        * and update often fields to avoid false sharing. If v1 stuff is
+        * not present, an explicit padding is needed.
         */
 
        struct rb_node          tree_node;      /* RB tree node */
        unsigned long           usage_in_excess;/* Set to the value by which */
                                                /* the soft limit is exceeded*/
        bool                    on_tree;
+#else
+       CACHELINE_PADDING(_pad1_);
 #endif
 
        /* Fields which get updated often at the end. */