From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751177AbcDPCyB (ORCPT ); Fri, 15 Apr 2016 22:54:01 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:34924 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750880AbcDPCx7 (ORCPT ); Fri, 15 Apr 2016 22:53:59 -0400 Date: Sat, 16 Apr 2016 11:55:29 +0900 From: Sergey Senozhatsky To: Andrew Morton Cc: Jan Kara , Petr Mladek , Tejun Heo , Tetsuo Handa , linux-kernel@vger.kernel.org, Byungchul Park , Sergey Senozhatsky , Sergey Senozhatsky Subject: Re: [PATCH v11 0/3] printk: Make printk() completely async Message-ID: <20160416025529.GA567@swordfish> References: <1460050307-3718-1-git-send-email-sergey.senozhatsky@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1460050307-3718-1-git-send-email-sergey.senozhatsky@gmail.com> User-Agent: Mutt/1.6.0 (2016-04-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On (04/08/16 02:31), Sergey Senozhatsky wrote: > Hello, > > This patch set makes printk() completely asynchronous: new messages > are getting upended to the kernel printk buffer, but instead of 'direct' > printing the actual print job is performed by a dedicated kthread. > This has the advantage that printing always happens from a schedulable > context and thus we don't lockup any particular CPU or even interrupts. Hello, Sir, is there anything else you want me to improve in this patch set? -ss > against next-20160407 > > v11: > -- switch default to sync printk > -- make `synchronous' param RW (Andrew, Jan) > -- set RT priority to printk kthread (Andrew) > -- correct comments (Andrew) > > v10: > -- simplify printk_kthread_need_flush_console (Jan, Petr) > > v9: > -- move need_flush_console assignment down in vprintk_emit (Jan) > -- simplify need_flush_console assignment rules (Petr) > -- clear need_flush_console in printing function (Petr) > -- rename need_flush_console (Petr) > > v8: > -- rename kthread printing function (Petr) > -- clear need_flush_console in console_unlock() under logbuf (Petr) > > v7: > -- do not set global printk_sync in panic in vrintk_emit() (Petr) > -- simplify vprintk_emit(). drop some of local variables (Petr) > -- move handling of LOGLEVEL_SCHED messages back to printk_deferred() > so we wake_up_process()/console_trylock() in vprintk_emit() only > for !in_sched messages > > v6: > -- move wake_up_process out of logbuf lock (Jan, Byungchul) > -- do not disable async printk in recursion handling code. > -- rebase against next-20160321 (w/NMI patches) > > v5: > -- make printk.synchronous RO (Petr) > -- make printing_func() correct and do not use wait_queue (Petr) > -- do not panic() when can't allocate printing thread (Petr) > -- do not wake_up_process() only in IRQ, prefer vprintk_emit() (Jan) > -- move wake_up_klogd_work_func() to a separate patch (Petr) > -- move wake_up_process() under logbuf lock so printk recursion logic can > help us out > -- switch to sync_print mode if printk recursion occured > -- drop "printk: Skip messages on oops" patch > > v4: > -- do not directly wake_up() the printing kthread from vprintk_emit(), need > to go via IRQ->wake_up() to avoid sched deadlocks (Jan) > > v3: > -- use a dedicated kthread for printing instead of using wq (Jan, Tetsuo, Tejun) > > v2: > - use dedicated printk workqueue with WQ_MEM_RECLAIM bit > - fallback to system-wide workqueue only if allocation of printk_wq has > failed > - do not use system_wq as a fallback wq. both console_lock() and onsole_unlock() > can spend a significant amount of time; so we need to use system_long_wq. > - rework sync/!sync detection logic > a) we can have deferred (in_sched) messages before we allocate printk_wq, > so the only way to handle those messages is via IRQ context > b) even in printk.synchronous mode, deferred messages must not be printed > directly, and should go via IRQ context > c) even if we allocated printk_wq and have !sync_printk mode, we must route > deferred messages via IRQ context > - so this adds additional bool flags to vprint_emit() and introduces a new > pending bit to `printk_pending' > - fix build on !PRINTK configs > > > Jan Kara (2): > printk: Make printk() completely async > printk: Make wake_up_klogd_work_func() async > > Sergey Senozhatsky (1): > printk: make printk.synchronous param rw > > Documentation/kernel-parameters.txt | 12 +++ > kernel/printk/printk.c | 155 +++++++++++++++++++++++++++++++++--- > 2 files changed, 157 insertions(+), 10 deletions(-) > > -- > 2.8.0 >