mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
mm/list_lru: don't pass unnecessary key parameters
Patch series "mm/list_lru: Split list_lru lock into per-cgroup scope". When LOCKDEP is not enabled, lock_class_key is an empty struct that is never used. But the list_lru initialization function still takes a placeholder pointer as parameter, and the compiler cannot optimize it because the function is not static and exported. Remove this parameter and move it inside the list_lru struct. Only use it when LOCKDEP is enabled. Kernel builds with LOCKDEP will be slightly larger, while !LOCKDEP builds without it will be slightly smaller (the common case). Link: https://lkml.kernel.org/r/20241104175257.60853-1-ryncsn@gmail.com Link: https://lkml.kernel.org/r/20241104175257.60853-2-ryncsn@gmail.com Signed-off-by: Kairui Song <kasong@tencent.com> Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Cc: Chengming Zhou <zhouchengming@bytedance.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Muchun Song <muchun.song@linux.dev> Cc: Qi Zheng <zhengqi.arch@bytedance.com> Cc: Roman Gushchin <roman.gushchin@linux.dev> Cc: Waiman Long <longman@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
3738290bfc
commit
3f28bbe56c
@@ -56,16 +56,28 @@ struct list_lru {
|
||||
bool memcg_aware;
|
||||
struct xarray xa;
|
||||
#endif
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
struct lock_class_key *key;
|
||||
#endif
|
||||
};
|
||||
|
||||
void list_lru_destroy(struct list_lru *lru);
|
||||
int __list_lru_init(struct list_lru *lru, bool memcg_aware,
|
||||
struct lock_class_key *key, struct shrinker *shrinker);
|
||||
struct shrinker *shrinker);
|
||||
|
||||
#define list_lru_init(lru) \
|
||||
__list_lru_init((lru), false, NULL, NULL)
|
||||
__list_lru_init((lru), false, NULL)
|
||||
#define list_lru_init_memcg(lru, shrinker) \
|
||||
__list_lru_init((lru), true, NULL, shrinker)
|
||||
__list_lru_init((lru), true, shrinker)
|
||||
|
||||
static inline int list_lru_init_memcg_key(struct list_lru *lru, struct shrinker *shrinker,
|
||||
struct lock_class_key *key)
|
||||
{
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
lru->key = key;
|
||||
#endif
|
||||
return list_lru_init_memcg(lru, shrinker);
|
||||
}
|
||||
|
||||
int memcg_list_lru_alloc(struct mem_cgroup *memcg, struct list_lru *lru,
|
||||
gfp_t gfp);
|
||||
|
||||
@@ -562,8 +562,7 @@ static void memcg_destroy_list_lru(struct list_lru *lru)
|
||||
}
|
||||
#endif /* CONFIG_MEMCG */
|
||||
|
||||
int __list_lru_init(struct list_lru *lru, bool memcg_aware,
|
||||
struct lock_class_key *key, struct shrinker *shrinker)
|
||||
int __list_lru_init(struct list_lru *lru, bool memcg_aware, struct shrinker *shrinker)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -583,8 +582,10 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware,
|
||||
|
||||
for_each_node(i) {
|
||||
spin_lock_init(&lru->node[i].lock);
|
||||
if (key)
|
||||
lockdep_set_class(&lru->node[i].lock, key);
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
if (lru->key)
|
||||
lockdep_set_class(&lru->node[i].lock, lru->key);
|
||||
#endif
|
||||
init_one_lru(&lru->node[i].lru);
|
||||
}
|
||||
|
||||
|
||||
@@ -813,8 +813,8 @@ static int __init workingset_init(void)
|
||||
if (!workingset_shadow_shrinker)
|
||||
goto err;
|
||||
|
||||
ret = __list_lru_init(&shadow_nodes, true, &shadow_nodes_key,
|
||||
workingset_shadow_shrinker);
|
||||
ret = list_lru_init_memcg_key(&shadow_nodes, workingset_shadow_shrinker,
|
||||
&shadow_nodes_key);
|
||||
if (ret)
|
||||
goto err_list_lru;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user