________________________________________ 发件人: Zhang, Qiang <Qiang.Zhang@xxxxxxxxxxxxx> 发送时间: 2020年7月31日 9:27 收件人: David Rientjes 抄送: cl@xxxxxxxxx; penberg@xxxxxxxxxx; iamjoonsoo.kim@xxxxxxx; akpm@xxxxxxxxxxxxxxxxxxxx; linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx 主题: 回复: [PATCH v3] mm/slab.c: add node spinlock protect in __cache_free_alien ________________________________________ 发件人: David Rientjes <rientjes@xxxxxxxxxx> 发送时间: 2020年7月31日 7:45 收件人: Zhang, Qiang 抄送: cl@xxxxxxxxx; penberg@xxxxxxxxxx; iamjoonsoo.kim@xxxxxxx; akpm@xxxxxxxxxxxxxxxxxxxx; linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx 主题: Re: [PATCH v3] mm/slab.c: add node spinlock protect in __cache_free_alien On Thu, 30 Jul 2020, qiang.zhang@xxxxxxxxxxxxx wrote: > From: Zhang Qiang <qiang.zhang@xxxxxxxxxxxxx> > > for example: > node0 > cpu0 cpu1 > slab_dead_cpu > >mutex_lock(&slab_mutex) > >cpuup_canceled slab_dead_cpu > >mask = cpumask_of_node(node) >mutex_lock(&slab_mutex) > >n = get_node(cachep0, node0) > >spin_lock_irq(n&->list_lock) > >if (!cpumask_empty(mask)) == true > >spin_unlock_irq(&n->list_lock) > >goto free_slab > .... > >mutex_unlock(&slab_mutex) > > .... >cpuup_canceled > >mask = cpumask_of_node(node) > kmem_cache_free(cachep0 ) >n = get_node(cachep0, node0) > >__cache_free_alien(cachep0 ) >spin_lock_irq(n&->list_lock) > >n = get_node(cachep0, node0) >if (!cpumask_empty(mask)) == false > >if (n->alien && n->alien[page_node]) >alien = n->alien > >alien = n->alien[page_node] >n->alien = NULL > >.... >spin_unlock_irq(&n->list_lock) > >.... > >As mentioned in the review of v1 of this patch, we likely want to do a fix >for cpuup_canceled() instead. >I see, you mean do fix in "cpuup_canceled" func? I'm very sorry, due to cpu_down receive gobal "cpu_hotplug_lock" write lock protect. multiple cpu offline is serial,the scenario I described above does not exist.