From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755509AbdKNONm (ORCPT ); Tue, 14 Nov 2017 09:13:42 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:37451 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755385AbdKNONf (ORCPT ); Tue, 14 Nov 2017 09:13:35 -0500 Date: Tue, 14 Nov 2017 15:13:27 +0100 (CET) From: Thomas Gleixner To: Michal Hocko cc: Andrew Morton , Tejun Heo , Peter Zijlstra , Johannes Weiner , Mel Gorman , linux-mm@kvack.org, LKML , Michal Hocko Subject: Re: [PATCH] mm: drop hotplug lock from lru_add_drain_all In-Reply-To: <20171114135348.28704-1-mhocko@kernel.org> Message-ID: References: <20171114135348.28704-1-mhocko@kernel.org> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 14 Nov 2017, Michal Hocko wrote: > From: Michal Hocko > > Pulling cpu hotplug locks inside the mm core function like > lru_add_drain_all just asks for problems and the recent lockdep splat > [1] just proves this. While the usage in that particular case might > be wrong we should prevent from locking as lru_add_drain_all is used > at many places. It seems that this is not all that hard to achieve > actually. > > We have done the same thing for drain_all_pages which is analogous by > a459eeb7b852 ("mm, page_alloc: do not depend on cpu hotplug locks inside > the allocator"). All we have to care about is to handle > - the work item might be executed on a different cpu in worker from > unbound pool so it doesn't run on pinned on the cpu > > - we have to make sure that we do not race with page_alloc_cpu_dead > calling lru_add_drain_cpu > > the first part is already handled because the worker calls lru_add_drain > which disables preemption when calling lru_add_drain_cpu on the local > cpu it is draining. The later is true because page_alloc_cpu_dead > is called on the controlling CPU after the hotplugged CPU vanished > completely. > > [1] http://lkml.kernel.org/r/089e0825eec8955c1f055c83d476@google.com > > Signed-off-by: Michal Hocko > --- > Hi, > this has been posted as 2 patch series [1] previously. It turned out > that the first patch was simply broken and the second one could be > simplified because the irq disabling is just pointless. There were > no other objections so I am resending this patch which should remove > quite a large space of potential lockups as lru_add_drain_all is used > at many places so removing the hoptlug locking is a good thing in > general. > > Can we have this merged or there are still some objections? No objections. The explanation makes sense, but it might be worth to have a comment at lru_add_drain_all() which explains the protection rules. Thanks, tglx