--- x/mm/list_lru.c +++ y/mm/list_lru.c @@ -123,7 +123,7 @@ bool list_lru_add(struct list_lru *lru, struct mem_cgroup *memcg; struct list_lru_one *l; - spin_lock(&nlru->lock); + spin_lock_irq(&nlru->lock); if (list_empty(item)) { l = list_lru_from_kmem(lru, nid, item, &memcg); list_add_tail(item, &l->list); @@ -132,10 +132,10 @@ bool list_lru_add(struct list_lru *lru, set_shrinker_bit(memcg, nid, lru_shrinker_id(lru)); nlru->nr_items++; - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); return true; } - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); return false; } EXPORT_SYMBOL_GPL(list_lru_add); @@ -146,16 +146,16 @@ bool list_lru_del(struct list_lru *lru, struct list_lru_node *nlru = &lru->node[nid]; struct list_lru_one *l; - spin_lock(&nlru->lock); + spin_lock_irq(&nlru->lock); if (!list_empty(item)) { l = list_lru_from_kmem(lru, nid, item, NULL); list_del_init(item); l->nr_items--; nlru->nr_items--; - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); return true; } - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); return false; } EXPORT_SYMBOL_GPL(list_lru_del); @@ -272,10 +272,10 @@ list_lru_walk_one(struct list_lru *lru, struct list_lru_node *nlru = &lru->node[nid]; unsigned long ret; - spin_lock(&nlru->lock); + spin_lock_irq(&nlru->lock); ret = __list_lru_walk_one(lru, nid, memcg_kmem_id(memcg), isolate, cb_arg, nr_to_walk); - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); return ret; } EXPORT_SYMBOL_GPL(list_lru_walk_one); @@ -312,11 +312,11 @@ unsigned long list_lru_walk_node(struct xa_for_each(&lru->xa, index, mlru) { struct list_lru_node *nlru = &lru->node[nid]; - spin_lock(&nlru->lock); + spin_lock_irq(&nlru->lock); isolated += __list_lru_walk_one(lru, nid, index, isolate, cb_arg, nr_to_walk); - spin_unlock(&nlru->lock); + spin_unlock_irq(&nlru->lock); if (*nr_to_walk <= 0) break;