* [merged mm-stable] mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers.patch removed from -mm tree
@ 2026-10-13 4:32 Andrew Morton
0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2026-10-13 4:32 UTC (permalink / raw)
To: mm-commits, yuanchu, willy, weixugc, vbabka, surenb, shikemeng,
shakeel.butt, rppt, roman.gushchin, nphamcs, muchun.song, mhocko,
ljs, liam, kasong, hannes, david, chrisl, baoquan.he, baolin.wang,
baohua, axelrasmussen, tz2294, akpm
The quilt patch titled
Subject: mm: memcontrol: constify the memcg and lruvec stat readers
has been removed from the -mm tree. Its filename was
mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers.patch
This patch was dropped because it was merged into the mm-stable branch
of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Tal Zussman <tz2294@columbia.edu>
Subject: mm: memcontrol: constify the memcg and lruvec stat readers
Date: Tue, 15 Sep 2026 19:20:12 -0400
The memcg_page_state(), memcg_events(), and lruvec_page_state() families
only read counters. Constify them.
Use container_of_const() in the lruvec_page_state() family while at it, so
the const isn't silently cast away.
Link: https://lore.kernel.org/20260915-folio_memcg-const-v3-8-c239a6010b58@columbia.edu
Signed-off-by: Tal Zussman <tz2294@columbia.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Muchun Song <muchun.song@linux.dev>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Baoquan He <baoquan.he@linux.dev>
Cc: Barry Song <baohua@kernel.org>
Cc: Chris Li <chrisl@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Kairui Song <kasong@tencent.com>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Wei Xu <weixugc@google.com>
Cc: Yuanchu Xie <yuanchu@google.com>
---
include/linux/memcontrol.h | 23 ++++++++++++-----------
mm/memcontrol-v1.h | 6 +++---
mm/memcontrol.c | 30 +++++++++++++++---------------
3 files changed, 30 insertions(+), 29 deletions(-)
--- a/include/linux/memcontrol.h~mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers
+++ a/include/linux/memcontrol.h
@@ -971,15 +971,16 @@ static inline void mod_memcg_page_state(
rcu_read_unlock();
}
-unsigned long memcg_events(struct mem_cgroup *memcg, int event);
-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx);
-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item);
+unsigned long memcg_events(const struct mem_cgroup *memcg, int event);
+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx);
+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item);
bool memcg_stat_item_valid(int idx);
bool memcg_vm_event_item_valid(enum vm_event_item idx);
-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx);
-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+unsigned long lruvec_page_state(const struct lruvec *lruvec,
+ enum node_stat_item idx);
+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx);
-unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx);
void mem_cgroup_flush_stats(struct mem_cgroup *memcg);
@@ -1412,12 +1413,12 @@ static inline void mod_memcg_page_state(
{
}
-static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
+static inline unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)
{
return 0;
}
-static inline unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)
+static inline unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)
{
return 0;
}
@@ -1432,19 +1433,19 @@ static inline bool memcg_vm_event_item_v
return false;
}
-static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state(lruvec_pgdat(lruvec), idx);
}
-static inline unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state_monotonic(lruvec_pgdat(lruvec), idx);
}
-static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+static inline unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx)
{
return node_page_state(lruvec_pgdat(lruvec), idx);
--- a/mm/memcontrol.c~mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers
+++ a/mm/memcontrol.c
@@ -506,9 +506,9 @@ struct lruvec_stats {
long state_pending[NR_MEMCG_NODE_STAT_ITEMS];
};
-unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)
+unsigned long lruvec_page_state(const struct lruvec *lruvec, enum node_stat_item idx)
{
- struct mem_cgroup_per_node *pn;
+ const struct mem_cgroup_per_node *pn;
long x;
int i;
@@ -519,7 +519,7 @@ unsigned long lruvec_page_state(struct l
if (WARN_ONCE(BAD_STAT_IDX(i), "%s: missing stat item %d\n", __func__, idx))
return 0;
- pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
+ pn = container_of_const(lruvec, struct mem_cgroup_per_node, lruvec);
x = READ_ONCE(pn->lruvec_stats->state[i]);
#ifdef CONFIG_SMP
if (x < 0)
@@ -547,10 +547,10 @@ unsigned long lruvec_page_state(struct l
* monotonically-incremented event counters are stored in
* enum node_stat_item.
*/
-unsigned long lruvec_page_state_monotonic(struct lruvec *lruvec,
+unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec,
enum node_stat_item idx)
{
- struct mem_cgroup_per_node *pn;
+ const struct mem_cgroup_per_node *pn;
int i;
if (mem_cgroup_disabled())
@@ -560,14 +560,14 @@ unsigned long lruvec_page_state_monotoni
if (WARN_ONCE(BAD_STAT_IDX(i), "%s: missing stat item %d\n", __func__, idx))
return 0;
- pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
+ pn = container_of_const(lruvec, struct mem_cgroup_per_node, lruvec);
return (unsigned long)READ_ONCE(pn->lruvec_stats->state[i]);
}
-unsigned long lruvec_page_state_local(struct lruvec *lruvec,
+unsigned long lruvec_page_state_local(const struct lruvec *lruvec,
enum node_stat_item idx)
{
- struct mem_cgroup_per_node *pn;
+ const struct mem_cgroup_per_node *pn;
long x;
int i;
@@ -578,7 +578,7 @@ unsigned long lruvec_page_state_local(st
if (WARN_ONCE(BAD_STAT_IDX(i), "%s: missing stat item %d\n", __func__, idx))
return 0;
- pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
+ pn = container_of_const(lruvec, struct mem_cgroup_per_node, lruvec);
x = READ_ONCE(pn->lruvec_stats->state_local[i]);
#ifdef CONFIG_SMP
if (x < 0)
@@ -841,7 +841,7 @@ static void flush_memcg_stats_dwork(stru
queue_delayed_work(system_dfl_wq, &stats_flush_dwork, FLUSH_TIME);
}
-unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
+unsigned long memcg_page_state(const struct mem_cgroup *memcg, int idx)
{
long x;
int i = memcg_stats_index(idx);
@@ -964,7 +964,7 @@ void mod_memcg_state(struct mem_cgroup *
#ifdef CONFIG_MEMCG_V1
/* idx can be of type enum memcg_stat_item or node_stat_item. */
-unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx)
+unsigned long memcg_page_state_local(const struct mem_cgroup *memcg, int idx)
{
long x;
int i = memcg_stats_index(idx);
@@ -1127,7 +1127,7 @@ void count_memcg_events(struct mem_cgrou
put_cpu();
}
-unsigned long memcg_events(struct mem_cgroup *memcg, int event)
+unsigned long memcg_events(const struct mem_cgroup *memcg, int event)
{
int i = memcg_events_index(event);
@@ -1146,7 +1146,7 @@ bool memcg_vm_event_item_valid(enum vm_e
}
#ifdef CONFIG_MEMCG_V1
-unsigned long memcg_events_local(struct mem_cgroup *memcg, int event)
+unsigned long memcg_events_local(const struct mem_cgroup *memcg, int event)
{
int i = memcg_events_index(event);
@@ -1729,14 +1729,14 @@ static int memcg_page_state_output_unit(
}
}
-unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item)
+unsigned long memcg_page_state_output(const struct mem_cgroup *memcg, int item)
{
return memcg_page_state(memcg, item) *
memcg_page_state_output_unit(item);
}
#ifdef CONFIG_MEMCG_V1
-unsigned long memcg_page_state_local_output(struct mem_cgroup *memcg, int item)
+unsigned long memcg_page_state_local_output(const struct mem_cgroup *memcg, int item)
{
return memcg_page_state_local(memcg, item) *
memcg_page_state_output_unit(item);
--- a/mm/memcontrol-v1.h~mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers
+++ a/mm/memcontrol-v1.h
@@ -37,9 +37,9 @@ static inline bool do_memsw_account(void
return !cgroup_subsys_on_dfl(memory_cgrp_subsys);
}
-unsigned long memcg_events_local(struct mem_cgroup *memcg, int event);
-unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx);
-unsigned long memcg_page_state_local_output(struct mem_cgroup *memcg, int item);
+unsigned long memcg_events_local(const struct mem_cgroup *memcg, int event);
+unsigned long memcg_page_state_local(const struct mem_cgroup *memcg, int idx);
+unsigned long memcg_page_state_local_output(const struct mem_cgroup *memcg, int item);
bool memcg1_alloc_events(struct mem_cgroup *memcg);
void memcg1_free_events(struct mem_cgroup *memcg);
_
Patches currently in -mm which might be from tz2294@columbia.edu are
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-13 4:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-13 4:32 [merged mm-stable] mm-memcontrol-constify-the-memcg-and-lruvec-stat-readers.patch removed from -mm tree Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.