From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755701AbcI3CnY (ORCPT ); Thu, 29 Sep 2016 22:43:24 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:33218 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751171AbcI3CnR (ORCPT ); Thu, 29 Sep 2016 22:43:17 -0400 Date: Fri, 30 Sep 2016 11:43:07 +0900 From: Sergey Senozhatsky To: Petr Mladek Cc: Sergey Senozhatsky , Jan Kara , Andrew Morton , Tejun Heo , Calvin Owens , linux-kernel@vger.kernel.org, Sergey Senozhatsky Subject: Re: [RFC][PATCH 0/7] printk: use alt_printk to handle printk() recursive calls Message-ID: <20160930024307.GE547@swordfish> References: <20160927142237.5539-1-sergey.senozhatsky@gmail.com> <20160929132502.GG26796@pathway.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160929132502.GG26796@pathway.suse.cz> User-Agent: Mutt/1.7.0 (2016-08-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On (09/29/16 15:25), Petr Mladek wrote: > On Tue 2016-09-27 23:22:30, Sergey Senozhatsky wrote: > > Hello, > > > > RFC > > > > This patch set extends a lock-less NMI per-cpu buffers idea to > > handle recursive printk() calls. The basic mechanism is pretty much the > > same -- at the beginning of a deadlock-prone section we switch to lock-less > > printk callback, and return back to a default printk implementation at the > > end; the messages are getting flushed to a logbuf buffer from a safer > > context. > > I was skeptical but I really like this way now. > > The switching of the buffers is a bit hairy in this version but I > think that we could make it much better. > > Other than that it looks like a big win. It kills a lot of > printk-related pain points. And it will not be that complicated > after all. many thanks for looking at this train wreck. so, like I said, it addresses printk()-recursion in *ideally* quite a minimalistic way -- just several alt_printk_enter/exit calls in printk.c, without ever touching any other parts of the kernel. gunning down printk deadlocks in general, however, requires much more effort; or even a completely different approach. a) a lock-less printk() by default um, `#define printk alt_printk'. but this will break printk() from irq. and the ordering of messages from per-cpu buffers may be far from correct. b) combining a DEFERRED_WARN + alt_printk DEFERRED_WARN potentially is a never ending thing. we can add some lockdep annotations, perhaps, and hope that error handling branches that may contain WARN_ONs/printk-s will be executed with prove_locking enabled on someone's machine. c) ... -ss