From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753686AbdGCTeT (ORCPT ); Mon, 3 Jul 2017 15:34:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:45388 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752364AbdGCTeS (ORCPT ); Mon, 3 Jul 2017 15:34:18 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7D1F522C7D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goodmis.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=rostedt@goodmis.org Date: Mon, 3 Jul 2017 15:34:14 -0400 From: Steven Rostedt To: Sergey Senozhatsky Cc: Petr Mladek , Sergey Senozhatsky , Jan Kara , Andrew Morton , Peter Zijlstra , "Rafael J . Wysocki" , Eric Biederman , Greg Kroah-Hartman , Jiri Slaby , Pavel Machek , Andreas Mohr , Tetsuo Handa , linux-kernel@vger.kernel.org Subject: Re: [RFC][PATCHv3 2/5] printk: introduce printing kernel thread Message-ID: <20170703153414.65ab12e3@gandalf.local.home> In-Reply-To: <20170703111130.GA836@jagdpanzerIV.localdomain> References: <20170509082859.854-1-sergey.senozhatsky@gmail.com> <20170509082859.854-3-sergey.senozhatsky@gmail.com> <20170510055935.GA1966@jagdpanzerIV.localdomain> <20170529092906.GD21894@pathway.suse.cz> <20170531072233.GC7672@jagdpanzerIV.localdomain> <20170628121925.GN1538@pathway.suse.cz> <20170629073321.GA475@jagdpanzerIV.localdomain> <20170630070131.GA474@jagdpanzerIV.localdomain> <20170630131610.GT1538@pathway.suse.cz> <20170630133844.GD792@jagdpanzerIV.localdomain> <20170703111130.GA836@jagdpanzerIV.localdomain> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 3 Jul 2017 20:11:30 +0900 Sergey Senozhatsky wrote: > +#define PRINTK_FLOOD_DEFAULT_DELAY 10 > + > int printk_delay_msec __read_mostly; > > +static inline void __printk_delay(int m) > +{ > + while (m--) { > + mdelay(1); > + touch_nmi_watchdog(); > + } > +} > + > static inline void printk_delay(void) > { > - if (unlikely(printk_delay_msec)) { > - int m = printk_delay_msec; > + unsigned long flags; > + u64 console_seen = 0, console_to_see; > > - while (m--) { > - mdelay(1); > - touch_nmi_watchdog(); > - } > + if (printk_delay_msec) { > + __printk_delay(printk_delay_msec); > + return; > + } > + This had better be an option, and not default. And what happens if the printk caller happens to preempt the one doing the writes to consoles? -- Steve > + /* > + * Check if consoles are far behind the loguf head and > + * throttle printk() callers if so. > + */ > + logbuf_lock_irqsave(flags); > + if (console_seq > log_first_seq) > + console_seen = console_seq - log_first_seq; > + console_to_see = log_next_seq - console_seq; > + logbuf_unlock_irqrestore(flags); > + > + if (console_seen < 4 * console_to_see) { > + if (printk_delay_msec) > + __printk_delay(printk_delay_msec); > + else > + __printk_delay(PRINTK_FLOOD_DEFAULT_DELAY); > } > } >