list_lru_walk_one_irq(struct list_lru *lru, int nid, struct mem_cgroup *memcg,
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/list_lru.h>
#include <linux/memcontrol.h>
static LIST_HEAD(list_lrus);
static DEFINE_MUTEX(list_lrus_mutex);
static void list_lru_register(struct list_lru *lru)
mutex_lock(&list_lrus_mutex);
list_add(&lru->list, &list_lrus);
mutex_unlock(&list_lrus_mutex);
static void list_lru_unregister(struct list_lru *lru)
mutex_lock(&list_lrus_mutex);
mutex_unlock(&list_lrus_mutex);
static int lru_shrinker_id(struct list_lru *lru)
static inline bool list_lru_memcg_aware(struct list_lru *lru)
return !!lru->node[0].memcg_lrus;
static inline struct list_lru_one *
list_lru_from_memcg_idx(struct list_lru_node *nlru, int idx)
struct list_lru_memcg *memcg_lrus;
memcg_lrus = rcu_dereference_check(nlru->memcg_lrus,
lockdep_is_held(&nlru->lock));
if (memcg_lrus && idx >= 0)
return memcg_lrus->lru[idx];
static __always_inline struct mem_cgroup *mem_cgroup_from_kmem(void *ptr)