Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936834AbdCYAGm (ORCPT ); Fri, 24 Mar 2017 20:06:42 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:34862 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936779AbdCYAGI (ORCPT ); Fri, 24 Mar 2017 20:06:08 -0400 Date: Sat, 25 Mar 2017 09:04:42 +0900 From: Sergey Senozhatsky To: Sebastian Ott Cc: Petr Mladek , Steven Rostedt , Andrew Morton , Thomas Gleixner , Peter Zijlstra , Linus Torvalds , Michal Hocko , Heiko Carstens , Martin Schwidefsky , linux-kernel@vger.kernel.org, Sergey Senozhatsky , Sergey Senozhatsky Subject: Re: lockdep warning: console vs. mem hotplug Message-ID: <20170325000442.GD6356@tigerII.localdomain> References: <20170321044421.GB448@jagdpanzerIV.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170321044421.GB448@jagdpanzerIV.localdomain> User-Agent: Mutt/1.8.0 (2017-02-23) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1227 Lines: 43 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);