Commit 5f5f30a5 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Kefeng Wang
Browse files

mm/memcontrol: remove __mod_lruvec_page_state()

mainline inclusion
from mainline-v6.8-rc1
commit c701123bd68bf1cc3bc167b4f597cb1f4995c39c
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9Q9DF
CVE: NA

-------------------------------------------------

There are no more callers of __mod_lruvec_page_state(), so convert the
implementation to __lruvec_stat_mod_folio(), removing two calls to
compound_head() (one explicit, one hidden inside page_memcg()).

Link: https://lkml.kernel.org/r/20231228085748.1083901-7-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
Acked-by: default avatarShakeel Butt <shakeelb@google.com>
Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
(cherry picked from commit c701123bd68bf1cc3bc167b4f597cb1f4995c39c)
Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
parent a44eb602
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -556,19 +556,25 @@ static inline void mod_lruvec_state(struct lruvec *lruvec,
	local_irq_restore(flags);
}

void __mod_lruvec_page_state(struct page *page,
void __lruvec_stat_mod_folio(struct folio *folio,
			     enum node_stat_item idx, int val);

static inline void mod_lruvec_page_state(struct page *page,
static inline void lruvec_stat_mod_folio(struct folio *folio,
					 enum node_stat_item idx, int val)
{
	unsigned long flags;

	local_irq_save(flags);
	__mod_lruvec_page_state(page, idx, val);
	__lruvec_stat_mod_folio(folio, idx, val);
	local_irq_restore(flags);
}

static inline void mod_lruvec_page_state(struct page *page,
					 enum node_stat_item idx, int val)
{
	lruvec_stat_mod_folio(page_folio(page), idx, val);
}

#else

static inline void __mod_lruvec_state(struct lruvec *lruvec,
@@ -583,26 +589,26 @@ static inline void mod_lruvec_state(struct lruvec *lruvec,
	mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
}

static inline void __mod_lruvec_page_state(struct page *page,
static inline void __lruvec_stat_mod_folio(struct folio *folio,
					 enum node_stat_item idx, int val)
{
	__mod_node_page_state(page_pgdat(page), idx, val);
	__mod_node_page_state(folio_pgdat(folio), idx, val);
}

static inline void mod_lruvec_page_state(struct page *page,
static inline void lruvec_stat_mod_folio(struct folio *folio,
					 enum node_stat_item idx, int val)
{
	mod_node_page_state(page_pgdat(page), idx, val);
	mod_node_page_state(folio_pgdat(folio), idx, val);
}

#endif /* CONFIG_MEMCG */

static inline void __lruvec_stat_mod_folio(struct folio *folio,
static inline void mod_lruvec_page_state(struct page *page,
					 enum node_stat_item idx, int val)
{
	__mod_lruvec_page_state(&folio->page, idx, val);
	mod_node_page_state(page_pgdat(page), idx, val);
}

#endif /* CONFIG_MEMCG */

static inline void __lruvec_stat_add_folio(struct folio *folio,
					   enum node_stat_item idx)
{
@@ -615,12 +621,6 @@ static inline void __lruvec_stat_sub_folio(struct folio *folio,
	__lruvec_stat_mod_folio(folio, idx, -folio_nr_pages(folio));
}

static inline void lruvec_stat_mod_folio(struct folio *folio,
					 enum node_stat_item idx, int val)
{
	mod_lruvec_page_state(&folio->page, idx, val);
}

static inline void lruvec_stat_add_folio(struct folio *folio,
					 enum node_stat_item idx)
{
+4 −5
Original line number Diff line number Diff line
@@ -897,16 +897,15 @@ void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
		__mod_memcg_lruvec_state(lruvec, idx, val);
}

void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
void __lruvec_stat_mod_folio(struct folio *folio, enum node_stat_item idx,
			     int val)
{
	struct page *head = compound_head(page); /* rmap on tail pages */
	struct mem_cgroup *memcg;
	pg_data_t *pgdat = page_pgdat(page);
	pg_data_t *pgdat = folio_pgdat(folio);
	struct lruvec *lruvec;

	rcu_read_lock();
	memcg = page_memcg(head);
	memcg = folio_memcg(folio);
	/* Untracked pages have no memcg, no lruvec. Update only the node */
	if (!memcg) {
		rcu_read_unlock();
@@ -918,7 +917,7 @@ void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx,
	__mod_lruvec_state(lruvec, idx, val);
	rcu_read_unlock();
}
EXPORT_SYMBOL(__mod_lruvec_page_state);
EXPORT_SYMBOL(__lruvec_stat_mod_folio);

void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val)
{