Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp755511ybz; Fri, 24 Apr 2020 08:45:37 -0700 (PDT) X-Google-Smtp-Source: APiQypJSUn4XMXQJ2H531CjrLdFwE1Fc/qV4I0oVZAKMeWroQ+RR4RrtsNi7cz3GGDszdLzRFpx7 X-Received: by 2002:a17:906:2792:: with SMTP id j18mr7954058ejc.215.1587743137272; Fri, 24 Apr 2020 08:45:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587743137; cv=none; d=google.com; s=arc-20160816; b=KS0Uz02rPg2E2xgXDG4BpoaU3Va/VnjtpnjmdfWR/ojNKb1UlixOdm4IiFLABYYvMB HSOg6SHL0XJRAGdPFxgAXKFsxjogGWgZSJZLE9JDP88cIcH77mFNe52dkPFa4Ke1x9tr vkekKpFb3otsOMib0RfNxr51U1scQMCDA3/rFsII31bxK8nfnYZooSxaNFLIrJ1Xv0SD lF8tLtNVXM2WLQRx5RJH/Y9269nj+e/JscE/uS4Hn+G0tazdAtNuNl6310wd97NU8rZ6 8CIjJB1uR2fjHu3imsPDmp01gAIyQDqSaDPXsgf0jCl5PozqLl229vgzdnUaVPwuLBWy m8rQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=ibzIFFsFwCipAuxjhonYKc7Yl3jig64+i6HYTqSpVww=; b=JKw5rLyl+WAxvwZdMJ8Xtc1CRi04E3WElVHn6u/cCD1gsCh6NjeAJE2htRJIF+Czdg FRUI+X9NgqFauDjGp7sXgz623pcJDrzqXu1arhV4Vu/jIoKcnjJo2yo9ARHLlDnLEkVb G5iwT9bmTvmUK8zur8d48tdUcn1DOwyzEL4I5/jaOVcymvyqCBFbJv2x3J2gecb/hRvT pclHYgN3uI4YFRDWAm2FpFKf1ShqNFfcQKlqsb/qldgLljL9UOYCL6u1RZKNkQbjo/dR lVrFnAwisPO6gQjDdJtpxLKhHdLIJdcUJEt6a7hH7BEBUfeEp5tGujj9T98+neXvUVQv ycBg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dp4si3497349ejc.399.2020.04.24.08.45.05; Fri, 24 Apr 2020 08:45:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728455AbgDXPm2 (ORCPT + 99 others); Fri, 24 Apr 2020 11:42:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:41330 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726872AbgDXPm2 (ORCPT ); Fri, 24 Apr 2020 11:42:28 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id AB46920706; Fri, 24 Apr 2020 15:42:26 +0000 (UTC) Date: Fri, 24 Apr 2020 11:42:25 -0400 From: Steven Rostedt To: Tetsuo Handa Cc: Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, Dmitry Safonov , Michal Hocko , Yafang Shao Subject: Re: [PATCH] printk: Add loglevel for "do not print to consoles". Message-ID: <20200424114225.5a3bab7e@gandalf.local.home> In-Reply-To: <7ec0b0a3-39ae-0f1c-b8c2-e1e9e60f1223@i-love.sakura.ne.jp> References: <20200424024239.63607-1-penguin-kernel@I-love.SAKURA.ne.jp> <20200424092816.62a61b1d@gandalf.local.home> <579fbe97-9aae-2b67-03ff-01291b9cbb7d@i-love.sakura.ne.jp> <20200424103131.7987f890@gandalf.local.home> <7ec0b0a3-39ae-0f1c-b8c2-e1e9e60f1223@i-love.sakura.ne.jp> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 25 Apr 2020 00:28:53 +0900 Tetsuo Handa wrote: > On 2020/04/24 23:31, Steven Rostedt wrote: > > On Fri, 24 Apr 2020 23:00:01 +0900 > > Tetsuo Handa wrote: > > > >> Since KERN_NO_CONSOLES is for -ENOMEM situations (GFP_KERNEL allocation which > >> can sleep needs to invoke the OOM killer, or GFP_ATOMIC allocation which cannot > >> sleep has failed), we can't create buffer on demand. For process context, it > >> would be possible to create buffer upon fork() time. But for atomic context, > >> it is so difficult to create buffer on demand. We could allocate shared buffer > >> like logbuf but it means that we have to replicate what printk() is doing (too > >> much code), for when atomic memory allocation happens resembles when printk() > >> is called. Borrowing printk()'s logbuf is simpler. > > > > I would have a buffer allocated for this at start up. > > Allocating global buffer itself is simple (except that it might waste a lot of > memory). Difficult part is how to use the buffer. I agree with Michal that this really should be a user setting (something on the command line or sysctl - allocation at the time of decision). > > > > > What exactly would you be "replicating" in printk? > > Making it possible to store into global buffer from almost any context (not only > process context but also softirq/hardirq/NMI context (well, is memory allocation > from NMI context not permitted? I don't know... but future KERN_NO_CONSOLES > users might want to call from NMI context)), notify userspace program of data > readiness, and manage the buffer. printk() was not safe in NMI context up until very recently. You can also use the tracing ring buffer for this, as it has been safe in all these contexts for a very long time. And that ring buffer is something that you can use outside of tracing (oprofile uses it). > > KERN_NO_CONSOLES does not need to call call_console_drivers(). But basically > things what printk() is doing. > > > The point of printk is > > to print to a console, not to be a generic ring buffer. This change is > > breaking printk's most useful feature. > > For those who analyze log files (instead of console output), the point of > printk() is to save kernel messages into log files (via userspace syslog > daemon). > > By the way, I think > > printk(KERN_NO_CONSOLES "hello\n") > > is almost same with doing > > saved_loglevel = console_loglevel; > console_loglevel = CONSOLE_LOGLEVEL_SILENT; > printk("hello\n"); > console_loglevel = saved_loglevel; > > used by vkdb_printf(). And both shouldn't be done within the kernel. The "CONSOLE_LOGLEVEL_SILENT" if for user decided policy, not the kernel making that policy for the user. -- Steve