linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: Brendan Higgins <brendanhiggins@google.com>
Cc: Jeff Dike <jdike@addtoit.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Daniel Vetter <daniel@ffwll.ch>,
	Amir Goldstein <amir73il@gmail.com>,
	Frank Rowand <frowand.list@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Kees Cook <keescook@google.com>,
	David Rientjes <rientjes@google.com>,
	kunit-dev@googlegroups.com,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Joel Stanley <joel@jms.id.au>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Rob Herring <robh@kernel.org>, Stephen Boyd <sboyd@kernel.org>,
	shuah <shuah@kernel.org>,
	wfg@linux.intel.com, Greg KH <gregkh@linuxfoundation.org>,
	Julia Lawall <julia.lawall@lip6.fr>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	linux-um@lists.infradead.org,
	Sasha Levin <Alexander.Levin@microsoft.com>,
	Theodore Ts'o <tytso@mit.edu>,
	Richard Weinberger <richard@nod.at>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Knut Omang <knut.omang@oracle.com>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Timothy Bird <Tim.Bird@sony.com>,
	John Ogness <john.ogness@linutronix.de>,
	devicetree <devicetree@vger.kernel.org>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH v9 04/18] kunit: test: add kunit_stream a std::stream like logger
Date: Fri, 26 Jul 2019 10:31:48 +0200	[thread overview]
Message-ID: <20190726083148.d4gf57w2nt5k7t6n@pathway.suse.cz> (raw)
In-Reply-To: <CAFd5g47v3Mr4GEGOjqyYy9Jwwm+ow7ypbu9j88rxEN06QCzdxQ@mail.gmail.com>

On Thu 2019-07-25 13:21:12, Brendan Higgins wrote:
> On Wed, Jul 24, 2019 at 12:31 AM Petr Mladek <pmladek@suse.com> wrote:
> >
> > On Mon 2019-07-22 16:54:10, Stephen Boyd wrote:
> > > Quoting Brendan Higgins (2019-07-22 15:30:49)
> > > > On Mon, Jul 22, 2019 at 1:03 PM Stephen Boyd <sboyd@kernel.org> wrote:
> > > > >
> > > > >
> > > > > What's the calling context of the assertions and expectations? I still
> > > > > don't like the fact that string stream needs to allocate buffers and
> > > > > throw them into a list somewhere because the calling context matters
> > > > > there.
> > > >
> > > > The calling context is the same as before, which is anywhere.
> > >
> > > Ok. That's concerning then.
> > >
> > > >
> > > > > I'd prefer we just wrote directly to the console/log via printk
> > > > > instead. That way things are simple because we use the existing
> > > > > buffering path of printk, but maybe there's some benefit to the string
> > > > > stream that I don't see? Right now it looks like it builds a string and
> > > > > then dumps it to printk so I'm sort of lost what the benefit is over
> > > > > just writing directly with printk.
> > > >
> > > > It's just buffering it so the whole string gets printed uninterrupted.
> > > > If we were to print out piecemeal to printk, couldn't we have another
> > > > call to printk come in causing it to garble the KUnit message we are
> > > > in the middle of printing?
> > >
> > > Yes, printing piecemeal by calling printk many times could lead to
> > > interleaving of messages if something else comes in such as an interrupt
> > > printing something. Printk has some support to hold "records" but I'm
> > > not sure how that would work here because KERN_CONT talks about only
> > > being used early on in boot code. I haven't looked at printk in detail
> > > though so maybe I'm all wrong and KERN_CONT just works?
> >
> > KERN_CONT does not guarantee that the message will get printed
> > together. The pieces get interleaved with messages printed in
> > parallel.
> >
> > Note that KERN_CONT was originally really meant to be used only during
> > boot. It was later used more widely and ended in the best effort category.
> >
> > There were several attempts to make it more reliable. But it was
> > always either too complicated or error prone or both.
> >
> > You need to use your own buffering if you rely want perfect output.
> > The question is if it is really worth the complexity. Also note that
> > any buffering reduces the chance that the messages will reach
> > the console.
> 
> Seems like that settles it then. Thanks!
> 
> > BTW: There is a work in progress on a lockless printk ring buffer.
> > It will make printk() more secure regarding deadlocks. But it might
> > make transparent handling of continuous lines even more tricky.
> >
> > I guess that local buffering, before calling printk(), will be
> > even more important then. Well, it might really force us to create
> > an API for it.
> 
> Cool! Can you CC me on that discussion?

Adding John Oggness into CC.

John, please CC Brendan Higgins on the patchsets eventually switching
printk() into the lockless buffer. The test framework is going to
do its own buffering to keep the related messages together.

The lockless ringbuffer might make handling of related (partial)
lines worse or better. It might justify KUnit's extra buffering
or it might allow to get rid of it.

> > Note that stroring the messages into the printk log is basically safe in any
> > context. It uses temporary per-CPU buffers for recursive messages and
> > in NMI. The only problem is panic() when some CPU gets stuck with the
> > lock taken. This will get solved by the lockless ringbuffer. Also
> > the temporary buffers will not be necessary any longer.
> 
> Sure, I think Stephen's concern is all the supporting code that is
> involved. Not printk specifically. It just means a lot more of KUnit
> has to be IRQ safe.

I see.

BTW: I wonder if KUnit could reuse the existing seq_buf implementation
for buffering messages.

I am sorry if it has already been proposed and rejected for some
reason. I might have missed it. Feel free to just point me to
same older mail.

> > Much bigger problems are with consoles. There are many of them. It
> > means a lot of code and more locks involved, including scheduler
> > locks. Note that console lock is a semaphore.
> 
> That shouldn't affect us though, right? As long as we continue to use
> the printk interface?

I guess that it should not affect KUnit.

The only problem might be if the testing framework calls printk()
inside scheduler or console code. And only when the tested code
uses the same locks that will be used by the called printk().

To be honest I do not fully understand KUnit design. I am not
completely sure how the tested code is isolated from the running
system. Namely, I do not know if the tested code shares
the same locks with the system running the test.

Best Regards,
Petr

  reply	other threads:[~2019-07-26  8:31 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-12  8:17 [PATCH v9 00/18] kunit: introduce KUnit, the Linux kernel unit testing framework Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 01/18] kunit: test: add KUnit test runner core Brendan Higgins
2019-07-15 20:10   ` Stephen Boyd
2019-07-15 21:25     ` Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 02/18] kunit: test: add test resource management API Brendan Higgins
2019-07-15 20:24   ` Stephen Boyd
2019-07-15 20:30     ` Brendan Higgins
2019-07-15 20:51       ` Stephen Boyd
2019-07-12  8:17 ` [PATCH v9 03/18] kunit: test: add string_stream a std::stream like string builder Brendan Higgins
2019-07-15 20:43   ` Stephen Boyd
2019-07-15 21:11     ` Brendan Higgins
2019-07-15 22:04       ` Stephen Boyd
2019-07-15 22:11         ` Brendan Higgins
2019-07-15 22:43           ` Brendan Higgins
2019-07-16 15:33             ` Stephen Boyd
2019-07-16 18:55               ` Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 04/18] kunit: test: add kunit_stream a std::stream like logger Brendan Higgins
2019-07-15 22:15   ` Stephen Boyd
2019-07-16  7:57     ` Brendan Higgins
2019-07-16  8:37       ` Brendan Higgins
2019-07-16 15:30         ` Stephen Boyd
2019-07-16 17:51           ` Brendan Higgins
2019-07-16 17:50         ` Stephen Boyd
2019-07-16 18:52           ` Brendan Higgins
2019-07-18 17:50             ` Stephen Boyd
2019-07-18 19:22               ` Brendan Higgins
2019-07-19  0:08                 ` Brendan Higgins
2019-07-22 18:10                   ` Brendan Higgins
2019-07-22 20:03                   ` Stephen Boyd
2019-07-22 22:30                     ` Brendan Higgins
2019-07-22 23:54                       ` Stephen Boyd
2019-07-23  0:32                         ` Brendan Higgins
2019-07-24  7:31                         ` Petr Mladek
2019-07-25 20:21                           ` Brendan Higgins
2019-07-26  8:31                             ` Petr Mladek [this message]
2019-08-01 18:55                               ` Brendan Higgins
2019-08-01 18:59                                 ` Brendan Higgins
2019-08-01 21:14                                   ` Stephen Boyd
2019-08-01 21:43                                     ` Brendan Higgins
2019-08-12 20:41                                       ` Brendan Higgins
2019-08-02  7:37                                 ` John Ogness
2019-08-12 21:12                                   ` Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 05/18] kunit: test: add the concept of expectations Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 06/18] kbuild: enable building KUnit Brendan Higgins
2019-07-15 20:49   ` Stephen Boyd
2019-07-12  8:17 ` [PATCH v9 07/18] kunit: test: add initial tests Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 08/18] objtool: add kunit_try_catch_throw to the noreturn list Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 09/18] kunit: test: add support for test abort Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 10/18] kunit: test: add tests for kunit " Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 11/18] kunit: test: add the concept of assertions Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 12/18] kunit: test: add tests for KUnit managed resources Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 13/18] kunit: tool: add Python wrappers for running KUnit tests Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 14/18] kunit: defconfig: add defconfigs for building " Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 15/18] Documentation: kunit: add documentation for KUnit Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 16/18] MAINTAINERS: add entry for KUnit the unit testing framework Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 17/18] kernel/sysctl-test: Add null pointer test for sysctl.c:proc_dointvec() Brendan Higgins
2019-07-12  8:17 ` [PATCH v9 18/18] MAINTAINERS: add proc sysctl KUnit test to PROC SYSCTL section Brendan Higgins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190726083148.d4gf57w2nt5k7t6n@pathway.suse.cz \
    --to=pmladek@suse.com \
    --cc=Alexander.Levin@microsoft.com \
    --cc=Tim.Bird@sony.com \
    --cc=amir73il@gmail.com \
    --cc=brendanhiggins@google.com \
    --cc=dan.carpenter@oracle.com \
    --cc=daniel@ffwll.ch \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=frowand.list@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jdike@addtoit.com \
    --cc=joel@jms.id.au \
    --cc=john.ogness@linutronix.de \
    --cc=jpoimboe@redhat.com \
    --cc=julia.lawall@lip6.fr \
    --cc=keescook@google.com \
    --cc=khilman@baylibre.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=knut.omang@oracle.com \
    --cc=kunit-dev@googlegroups.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=linux-um@lists.infradead.org \
    --cc=logang@deltatee.com \
    --cc=mcgrof@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=richard@nod.at \
    --cc=rientjes@google.com \
    --cc=robh@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=sboyd@kernel.org \
    --cc=shuah@kernel.org \
    --cc=tytso@mit.edu \
    --cc=wfg@linux.intel.com \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).