On Sat, 25 Mar 2017 09:04:42 +0900 Sergey Senozhatsky <sergey.senozhat...@gmail.com> 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); My fear is that this will trigger for any printk in page_alloc.c under the zone lock. -- Steve