Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753436AbdC1OWm (ORCPT ); Tue, 28 Mar 2017 10:22:42 -0400 Received: from mx2.suse.de ([195.135.220.15]:60504 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752937AbdC1OWk (ORCPT ); Tue, 28 Mar 2017 10:22:40 -0400 Date: Tue, 28 Mar 2017 16:22:27 +0200 From: Michal Hocko To: Sergey Senozhatsky Cc: Sebastian Ott , Petr Mladek , Steven Rostedt , Andrew Morton , Thomas Gleixner , Peter Zijlstra , Linus Torvalds , Heiko Carstens , Martin Schwidefsky , linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: Re: lockdep warning: console vs. mem hotplug Message-ID: <20170328142226.GK18241@dhcp22.suse.cz> References: <20170321044421.GB448@jagdpanzerIV.localdomain> <20170325000442.GD6356@tigerII.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170325000442.GD6356@tigerII.localdomain> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1682 Lines: 54 On Sat 25-03-17 09:04:42, Sergey Senozhatsky wrote: > On (03/21/17 13:44), Sergey Senozhatsky wrote: > [..] > > so we probably can > > > > > > 1) move pr_info() out of zone->lock in __offline_isolated_pages(). > > meh... > > > > > > 2) switch to printk_deferred() in __offline_isolated_pages(). > > meh.. there might a bunch of other printks done from under zone->lock. > > > > > > 3) move add_timer() out of sclp_con_lock console in sclp_console_write(). > > well, there can be other consoles that do something similar. > > > > > > 4) ... something smart. > > > Sebastian, does this change make lockdep happy? > > it removes console drivers from the __offline_isolated_pages(). not the > best solution I can think of, but the simplest one. > > --- > > mm/page_alloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index f749b7ff7c50..eb61e6ab5f4f 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) > BUG_ON(!PageBuddy(page)); > order = page_order(page); > #ifdef CONFIG_DEBUG_VM > - pr_info("remove from free list %lx %d %lx\n", > + printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n", > pfn, 1 << order, end_pfn); > #endif > list_del(&page->lru); I believe this is not a proper fix. Although this code is ugly and maybe it doesn't really need zone->lock because that should be the page allocator internal thing the problem is that printk shouldn't impose such a subtle dependency on locks. Why does the timer needs to allocate at all? -- Michal Hocko SUSE Labs