@@ -4728,10 +4728,11 @@ static void lru_gen_rotate_memcg(struct lruvec *lruvec, int op)
4728
4728
{
4729
4729
int seg ;
4730
4730
int old , new ;
4731
+ unsigned long flags ;
4731
4732
int bin = get_random_u32_below (MEMCG_NR_BINS );
4732
4733
struct pglist_data * pgdat = lruvec_pgdat (lruvec );
4733
4734
4734
- spin_lock (& pgdat -> memcg_lru .lock );
4735
+ spin_lock_irqsave (& pgdat -> memcg_lru .lock , flags );
4735
4736
4736
4737
VM_WARN_ON_ONCE (hlist_nulls_unhashed (& lruvec -> lrugen .list ));
4737
4738
@@ -4766,7 +4767,7 @@ static void lru_gen_rotate_memcg(struct lruvec *lruvec, int op)
4766
4767
if (!pgdat -> memcg_lru .nr_memcgs [old ] && old == get_memcg_gen (pgdat -> memcg_lru .seq ))
4767
4768
WRITE_ONCE (pgdat -> memcg_lru .seq , pgdat -> memcg_lru .seq + 1 );
4768
4769
4769
- spin_unlock (& pgdat -> memcg_lru .lock );
4770
+ spin_unlock_irqrestore (& pgdat -> memcg_lru .lock , flags );
4770
4771
}
4771
4772
4772
4773
void lru_gen_online_memcg (struct mem_cgroup * memcg )
@@ -4779,7 +4780,7 @@ void lru_gen_online_memcg(struct mem_cgroup *memcg)
4779
4780
struct pglist_data * pgdat = NODE_DATA (nid );
4780
4781
struct lruvec * lruvec = get_lruvec (memcg , nid );
4781
4782
4782
- spin_lock (& pgdat -> memcg_lru .lock );
4783
+ spin_lock_irq (& pgdat -> memcg_lru .lock );
4783
4784
4784
4785
VM_WARN_ON_ONCE (!hlist_nulls_unhashed (& lruvec -> lrugen .list ));
4785
4786
@@ -4790,7 +4791,7 @@ void lru_gen_online_memcg(struct mem_cgroup *memcg)
4790
4791
4791
4792
lruvec -> lrugen .gen = gen ;
4792
4793
4793
- spin_unlock (& pgdat -> memcg_lru .lock );
4794
+ spin_unlock_irq (& pgdat -> memcg_lru .lock );
4794
4795
}
4795
4796
}
4796
4797
@@ -4814,7 +4815,7 @@ void lru_gen_release_memcg(struct mem_cgroup *memcg)
4814
4815
struct pglist_data * pgdat = NODE_DATA (nid );
4815
4816
struct lruvec * lruvec = get_lruvec (memcg , nid );
4816
4817
4817
- spin_lock (& pgdat -> memcg_lru .lock );
4818
+ spin_lock_irq (& pgdat -> memcg_lru .lock );
4818
4819
4819
4820
VM_WARN_ON_ONCE (hlist_nulls_unhashed (& lruvec -> lrugen .list ));
4820
4821
@@ -4826,7 +4827,7 @@ void lru_gen_release_memcg(struct mem_cgroup *memcg)
4826
4827
if (!pgdat -> memcg_lru .nr_memcgs [gen ] && gen == get_memcg_gen (pgdat -> memcg_lru .seq ))
4827
4828
WRITE_ONCE (pgdat -> memcg_lru .seq , pgdat -> memcg_lru .seq + 1 );
4828
4829
4829
- spin_unlock (& pgdat -> memcg_lru .lock );
4830
+ spin_unlock_irq (& pgdat -> memcg_lru .lock );
4830
4831
}
4831
4832
}
4832
4833
0 commit comments