All of lore.kernel.org
 help / color / mirror / Atom feed
From: Knut Omang <knut.omang-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
To: Theodore Ts'o <tytso-3s7WtUTddSA@public.gmane.org>
Cc: pmladek-IBi9RG/b67k@public.gmane.org,
	linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	amir73il-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	Brendan Higgins
	<brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	Alexander.Levin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org,
	mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org,
	linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org,
	Frank Rowand
	<frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	kieran.bingham-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org,
	wfg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org,
	joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org,
	rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	jdike-OPE4K8JWMJJBDgjK7y7TUQ@public.gmane.org,
	dan.carpenter-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kbuild-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Tim.Bird-7U/KSKJipcs@public.gmane.org,
	linux-um-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org,
	julia.lawall-L2FTfq7BK8M@public.gmane.org,
	kunit-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
	richard-/L3Ra7n9ekc@public.gmane.org,
	sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	Greg KH
	<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	mcgrof-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	daniel-/w4YWyX8dFk@public.gmane.org,
	keescook-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org
Subject: Re: [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework
Date: Thu, 09 May 2019 16:48:51 +0200	[thread overview]
Message-ID: <3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com> (raw)
In-Reply-To: <20190509133551.GD29703-3s7WtUTddSA@public.gmane.org>

On Thu, 2019-05-09 at 09:35 -0400, Theodore Ts'o wrote:
> On Thu, May 09, 2019 at 01:52:15PM +0200, Knut Omang wrote:
> > 1) Tests that exercises typically algorithmic or intricate, complex
> >    code with relatively few outside dependencies, or where the dependencies 
> >    are considered worth mocking, such as the basics of container data 
> >    structures or page table code. If I get you right, Ted, the tests 
> >    you refer to in this thread are such tests. I believe covering this space 
> >    is the goal Brendan has in mind for KUnit.
> 
> Yes, that's correct.  I'd also add that one of the key differences is
> that it sounds like Frank and you are coming from the perspective of
> testing *device drivers* where in general there aren't a lot of
> complex code which is hardware independent.  After all, the vast
> majority of device drivers are primarily interface code to hardware,
> with as much as possible abstracted away to common code.  (Take, for
> example, the model of the SCSI layer; or all of the kobject code.)
>
> > 2) Tests that exercises interaction between a module under test and other 
> >    parts of the kernel, such as testing intricacies of the interaction of 
> >    a driver or file system with the rest of the kernel, and with hardware, 
> >    whether that is real hardware or a model/emulation. 
> >    Using your testing needs as example again, Ted, from my shallow understanding,
> >    you have such needs within the context of xfstests (
> https://github.com/tytso/xfstests)
> 
> Well, upstream is for xfstests is git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git

Thanks for the correction!

> The test framework where I can run 20 hours worth of xfstests
> (multiple file system features enabled, multiple mount options, etc.)
> in 3 hours of wall clock time using multiple cloud VM is something
> called gce-xfstests.
> 
> I also have kvm-xfstests, which optimizes low test latency, where I
> want to run a one or a small number of tests with a minimum of
> overhead --- gce startup and shutdown is around 2 minutes, where as
> kvm startup and shutdown is about 7 seconds.  As far as I'm concerned,
> 7 seconds is still too slow, but that's the best I've been able to do
> given all of the other things I want a test framework to do, including
> archiving test results, parsing the test results so it's easy to
> interpret, etc.  Both kvm-xfstests and gce-xfstests are located at:
> 
> 	git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
> 
> So if Frank's primary argument is "too many frameworks", it's already
> too late.  The block layer has blktests has a seprate framework,
> called blktests --- and yeah, it's a bit painful to launch or learn
> how to set things up.

I agree at that level - and the good thing is that there are a lot to learn 
from looking at other people's ways - but working towards unification rather than even
more similar, but subtly different ways I think is a good thing anyway!

> That's why I added support to run blktests using gce-xfstests and
> kvm-xfstests, so that "gce-xfstests --blktests" or "kvm-xfstests
> --xfstests" will pluck a kernel from your build tree, and launch at
> test appliance VM using that kernel and run the block layer tests.
> 
> The point is we *already* have multiple test frameworks, which are
> optimized for testing different parts of the kernel.  And if you plan
> to do a lot of work in these parts of the kernel, you're going to have
> to learn how to use some other test framework other than kselftest.
> Sorry, that's just the way it goes.
> 
> Of course, I'll accept trivial patches that haven't been tested using
> xfstests --- but that's because I can trivially run the smoke test for
> you.  Of course, if I get a lot of patches from a contributor which
> cause test regressions, I'll treat them much like someone who
> contribute patches which fail to build.  I'll apply pressure to the
> contributor to actually build test, or run a ten minute kvm-xfstests
> smoke test.  Part of the reason why I feel comfortable to do this is
> it's really easy to run the smoke test.  There are pre-compiled test
> appliances, and a lot of documentation:
> 
> https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md
> 
> This is why I have close to zero sympathy to Frank's complaint that
> extra test frameworks are a bad thing.  To me, that's whining.  I've
> done a huge amount of work to meet contributors more than half-way.
> The insistence that "There Must Be One", ala the Highlander movie, is
> IMHO so wrong that it's not even close.  Is it really that hard to do
> a "git pull", download a test appliance, set up a config file to tell
> kvm-xfstests where to find your build tree, and then run "kvm-xfstests
> --smoke" or "gce-xfstests --smoke"?  Cry me a river.
> 
> There are already multiple test frameworks, and if you expect to do a
> lot of work in a particular subsystem, you'll be expected to use the
> Maintainer's choice of tests.  Deal with it.  We do this so we can
> scale to the number of contributors we have in our subsystem.
> 
> > To 1) I agree with Frank in that the problem with using UML is that you still have to
> > relate to the complexity of a kernel run time system, while what you really want for
> these
> > types of tests is just to compile a couple of kernel source files in a normal user
> land
> > context, to allow the use of Valgrind and other user space tools on the code.
> 
> "Just compiling a couple of kernel source files in a normal user land"
> is much harder than you think.  It requires writing vast numbers of
> mocking functions --- for a file system I would have to simulate the
> block device layer, large portions of the VFS layer, the scheduler and
> the locking layer if I want to test locking bugs, etc., etc.  In
> practice, UML itself is serving as mocking layer, by its mere
> existence.  

I might not see the full picture here wrt file system testing, 
but I do know exactly how difficult it is to do it for that ~29,000 
lines of code Infiniband driver I was working on, since actually I did it
with several versions of the kernel. Anyway that's probably more of a 
topic for a talk than an email thread :-)

> So when Frank says that KUnit doesn't provide any mocking
> functions, I don't at all agree.  Using KUnit and UML makes testing
> internal interfaces *far* simpler, especially if the comparison is
> "just compile some kernel source files as part of a userspace test
> program".
> 
> Perhaps your and Frank's experience is different --- perhaps that can
> be explained by your past experience and interest in testing device
> drivers as opposed to file systems.
> 
> The other thing I'd add is that at least for me, a really important
> consideration is how quickly we can run tests.  I consider
> minimization of developer friction (e.g., all you need to do is
> running "make ; kvm-xfstests --smoke" to run tests), and maximizing
> developer velocity to be high priority goals.  Developer velocity is
> how quickly can you run the tests; ideally, less than 5-10 seconds.

I completely agree on that one. I think a fundamental feature of any 
framework at this level is that it should be usable as developer tests as part
of an efficient work cycle.

> And that's the other reason why I consider unit tests to be a
> complement to integration tests.  "gce-xfstests --smoke" takes 10-15
> minutes.  If I can have unit tests which takes 5-15 seconds for a
> smoke test of the specific part of ext4 that I am modifying (and often
> with much better coverage than integration tests from userspace),
> that's at really big deal.  I can do this for e2fsprogs; but if I have
> to launch a VM, the VM overhead pretty much eats all or most of that
> time budget right there.

This is exactly the way we work with KTF as well: 
Change the kernel module under test, and/or the test code, 
compile, unload/load modules and run the tests again, all within seconds.
The overhead of rebooting one or more VMs (network tests sometimes 
require more than one node) or even a physical system, 
if the issue cannot be reproduced without running non-virtualized, 
would only be necessary if the test causes an oops or other crash 
that prevents the unload/load path.

> From looking at your documentation of KTF, you are targetting the use
> case of continuous testing.  That's a different testing scenario than
> what I'm describing; with continuous testing, overhead measured in
> minutes or even tens of minutes is not a big deal.  But if you are
> trying to do real-time testing as part of your development process ---
> *real* Test Driven Development, then test latency is a really big
> deal.

My experience is that unless one can enforce tests to be run on 
everyone else's changes as well, one often ends up having to pursue the bugs 
introduced by others but caught by the tests, so I believe automation and 
unit/low level testing really should go hand in hand. This is the reason for 
the emphasis on automation in the KTF docs, but the primary driver for me has 
always been as a developer toolkit.

> I'll grant that for people who are working on device drivers where
> architecture dependencies are a big deal, building for an architecture
> where you can run in a virtual environment or using test hardware is
> going to be a better way to go.  And Brendan has said he's willing to
> look at adapting KUnit so it can be built for use in a virtual
> environment to accomodate your requirements.
> 
> As far as I'm concerned, however, I would *not* be interested in KTF
> unless you could demonstrate to me that launching at test VM, somehow
> getting the kernel modules copied into the VM, and running the tests
> as kernel modules, has zero overhead compared to using UML.

As you alluded to above, the development cycle time is really the crucial 
thing here - if what you get has more value to you, then you'd be willing 
to wait just a few more seconds for it. And IMHO the real interesting notion of 
time is the time from saving the changes until you can verify that 
the test either passes, or even more important: Why it failed..

> Ultimately, I'm a pragmatist.  If KTF serves your needs best, good for
> you.  If other approaches are better for other parts of the kernel,
> let's not try to impose a strict "There Must Be Only One" religion.
> That's already not true today, and for good reason.  There are many
> different kinds of kernel code, and many different types of test
> philosophies.  Trying to force all kernel testing into a single
> Procrustean Bed is simply not productive.

I definitely pragmatically prefer evolution over revolution myself, 
no doubt about that, and I definitely appreciate this detailed view seen from the 
filesystem side,

Thanks!
Knut

> 
> Regards,
> 
> 						- Ted

WARNING: multiple messages have this Message-ID (diff)
From: Knut Omang <knut.omang@oracle.com>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: Frank Rowand <frowand.list@gmail.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Brendan Higgins <brendanhiggins@google.com>,
	keescook@google.com, kieran.bingham@ideasonboard.com,
	mcgrof@kernel.org, robh@kernel.org, sboyd@kernel.org,
	shuah@kernel.org, devicetree@vger.kernel.org,
	dri-devel@lists.freedesktop.org, kunit-dev@googlegroups.com,
	linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org, linux-nvdimm@lists.01.org,
	linux-um@lists.infradead.org, Alexander.Levin@microsoft.com,
	Tim.Bird@sony.com, amir73il@gmail.com, dan.carpenter@oracle.com,
	dan.j.williams@intel.com, daniel@ffwll.ch, jdike@addtoit.com,
	joel@jms.id.au, julia.lawall@lip6.fr, khilman@baylibre.com,
	logang@deltatee.com, mpe@ellerman.id.au, pmladek@suse.com,
	richard@nod.at, rientjes@google.com, rostedt@goodmis.org,
	wfg@linux.intel.com
Subject: Re: [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework
Date: Thu, 09 May 2019 16:48:51 +0200	[thread overview]
Message-ID: <3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com> (raw)
In-Reply-To: <20190509133551.GD29703@mit.edu>

On Thu, 2019-05-09 at 09:35 -0400, Theodore Ts'o wrote:
> On Thu, May 09, 2019 at 01:52:15PM +0200, Knut Omang wrote:
> > 1) Tests that exercises typically algorithmic or intricate, complex
> >    code with relatively few outside dependencies, or where the dependencies 
> >    are considered worth mocking, such as the basics of container data 
> >    structures or page table code. If I get you right, Ted, the tests 
> >    you refer to in this thread are such tests. I believe covering this space 
> >    is the goal Brendan has in mind for KUnit.
> 
> Yes, that's correct.  I'd also add that one of the key differences is
> that it sounds like Frank and you are coming from the perspective of
> testing *device drivers* where in general there aren't a lot of
> complex code which is hardware independent.  After all, the vast
> majority of device drivers are primarily interface code to hardware,
> with as much as possible abstracted away to common code.  (Take, for
> example, the model of the SCSI layer; or all of the kobject code.)
>
> > 2) Tests that exercises interaction between a module under test and other 
> >    parts of the kernel, such as testing intricacies of the interaction of 
> >    a driver or file system with the rest of the kernel, and with hardware, 
> >    whether that is real hardware or a model/emulation. 
> >    Using your testing needs as example again, Ted, from my shallow understanding,
> >    you have such needs within the context of xfstests (
> https://github.com/tytso/xfstests)
> 
> Well, upstream is for xfstests is git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git

Thanks for the correction!

> The test framework where I can run 20 hours worth of xfstests
> (multiple file system features enabled, multiple mount options, etc.)
> in 3 hours of wall clock time using multiple cloud VM is something
> called gce-xfstests.
> 
> I also have kvm-xfstests, which optimizes low test latency, where I
> want to run a one or a small number of tests with a minimum of
> overhead --- gce startup and shutdown is around 2 minutes, where as
> kvm startup and shutdown is about 7 seconds.  As far as I'm concerned,
> 7 seconds is still too slow, but that's the best I've been able to do
> given all of the other things I want a test framework to do, including
> archiving test results, parsing the test results so it's easy to
> interpret, etc.  Both kvm-xfstests and gce-xfstests are located at:
> 
> 	git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
> 
> So if Frank's primary argument is "too many frameworks", it's already
> too late.  The block layer has blktests has a seprate framework,
> called blktests --- and yeah, it's a bit painful to launch or learn
> how to set things up.

I agree at that level - and the good thing is that there are a lot to learn 
from looking at other people's ways - but working towards unification rather than even
more similar, but subtly different ways I think is a good thing anyway!

> That's why I added support to run blktests using gce-xfstests and
> kvm-xfstests, so that "gce-xfstests --blktests" or "kvm-xfstests
> --xfstests" will pluck a kernel from your build tree, and launch at
> test appliance VM using that kernel and run the block layer tests.
> 
> The point is we *already* have multiple test frameworks, which are
> optimized for testing different parts of the kernel.  And if you plan
> to do a lot of work in these parts of the kernel, you're going to have
> to learn how to use some other test framework other than kselftest.
> Sorry, that's just the way it goes.
> 
> Of course, I'll accept trivial patches that haven't been tested using
> xfstests --- but that's because I can trivially run the smoke test for
> you.  Of course, if I get a lot of patches from a contributor which
> cause test regressions, I'll treat them much like someone who
> contribute patches which fail to build.  I'll apply pressure to the
> contributor to actually build test, or run a ten minute kvm-xfstests
> smoke test.  Part of the reason why I feel comfortable to do this is
> it's really easy to run the smoke test.  There are pre-compiled test
> appliances, and a lot of documentation:
> 
> https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md
> 
> This is why I have close to zero sympathy to Frank's complaint that
> extra test frameworks are a bad thing.  To me, that's whining.  I've
> done a huge amount of work to meet contributors more than half-way.
> The insistence that "There Must Be One", ala the Highlander movie, is
> IMHO so wrong that it's not even close.  Is it really that hard to do
> a "git pull", download a test appliance, set up a config file to tell
> kvm-xfstests where to find your build tree, and then run "kvm-xfstests
> --smoke" or "gce-xfstests --smoke"?  Cry me a river.
> 
> There are already multiple test frameworks, and if you expect to do a
> lot of work in a particular subsystem, you'll be expected to use the
> Maintainer's choice of tests.  Deal with it.  We do this so we can
> scale to the number of contributors we have in our subsystem.
> 
> > To 1) I agree with Frank in that the problem with using UML is that you still have to
> > relate to the complexity of a kernel run time system, while what you really want for
> these
> > types of tests is just to compile a couple of kernel source files in a normal user
> land
> > context, to allow the use of Valgrind and other user space tools on the code.
> 
> "Just compiling a couple of kernel source files in a normal user land"
> is much harder than you think.  It requires writing vast numbers of
> mocking functions --- for a file system I would have to simulate the
> block device layer, large portions of the VFS layer, the scheduler and
> the locking layer if I want to test locking bugs, etc., etc.  In
> practice, UML itself is serving as mocking layer, by its mere
> existence.  

I might not see the full picture here wrt file system testing, 
but I do know exactly how difficult it is to do it for that ~29,000 
lines of code Infiniband driver I was working on, since actually I did it
with several versions of the kernel. Anyway that's probably more of a 
topic for a talk than an email thread :-)

> So when Frank says that KUnit doesn't provide any mocking
> functions, I don't at all agree.  Using KUnit and UML makes testing
> internal interfaces *far* simpler, especially if the comparison is
> "just compile some kernel source files as part of a userspace test
> program".
> 
> Perhaps your and Frank's experience is different --- perhaps that can
> be explained by your past experience and interest in testing device
> drivers as opposed to file systems.
> 
> The other thing I'd add is that at least for me, a really important
> consideration is how quickly we can run tests.  I consider
> minimization of developer friction (e.g., all you need to do is
> running "make ; kvm-xfstests --smoke" to run tests), and maximizing
> developer velocity to be high priority goals.  Developer velocity is
> how quickly can you run the tests; ideally, less than 5-10 seconds.

I completely agree on that one. I think a fundamental feature of any 
framework at this level is that it should be usable as developer tests as part
of an efficient work cycle.

> And that's the other reason why I consider unit tests to be a
> complement to integration tests.  "gce-xfstests --smoke" takes 10-15
> minutes.  If I can have unit tests which takes 5-15 seconds for a
> smoke test of the specific part of ext4 that I am modifying (and often
> with much better coverage than integration tests from userspace),
> that's at really big deal.  I can do this for e2fsprogs; but if I have
> to launch a VM, the VM overhead pretty much eats all or most of that
> time budget right there.

This is exactly the way we work with KTF as well: 
Change the kernel module under test, and/or the test code, 
compile, unload/load modules and run the tests again, all within seconds.
The overhead of rebooting one or more VMs (network tests sometimes 
require more than one node) or even a physical system, 
if the issue cannot be reproduced without running non-virtualized, 
would only be necessary if the test causes an oops or other crash 
that prevents the unload/load path.

> From looking at your documentation of KTF, you are targetting the use
> case of continuous testing.  That's a different testing scenario than
> what I'm describing; with continuous testing, overhead measured in
> minutes or even tens of minutes is not a big deal.  But if you are
> trying to do real-time testing as part of your development process ---
> *real* Test Driven Development, then test latency is a really big
> deal.

My experience is that unless one can enforce tests to be run on 
everyone else's changes as well, one often ends up having to pursue the bugs 
introduced by others but caught by the tests, so I believe automation and 
unit/low level testing really should go hand in hand. This is the reason for 
the emphasis on automation in the KTF docs, but the primary driver for me has 
always been as a developer toolkit.

> I'll grant that for people who are working on device drivers where
> architecture dependencies are a big deal, building for an architecture
> where you can run in a virtual environment or using test hardware is
> going to be a better way to go.  And Brendan has said he's willing to
> look at adapting KUnit so it can be built for use in a virtual
> environment to accomodate your requirements.
> 
> As far as I'm concerned, however, I would *not* be interested in KTF
> unless you could demonstrate to me that launching at test VM, somehow
> getting the kernel modules copied into the VM, and running the tests
> as kernel modules, has zero overhead compared to using UML.

As you alluded to above, the development cycle time is really the crucial 
thing here - if what you get has more value to you, then you'd be willing 
to wait just a few more seconds for it. And IMHO the real interesting notion of 
time is the time from saving the changes until you can verify that 
the test either passes, or even more important: Why it failed..

> Ultimately, I'm a pragmatist.  If KTF serves your needs best, good for
> you.  If other approaches are better for other parts of the kernel,
> let's not try to impose a strict "There Must Be Only One" religion.
> That's already not true today, and for good reason.  There are many
> different kinds of kernel code, and many different types of test
> philosophies.  Trying to force all kernel testing into a single
> Procrustean Bed is simply not productive.

I definitely pragmatically prefer evolution over revolution myself, 
no doubt about that, and I definitely appreciate this detailed view seen from the 
filesystem side,

Thanks!
Knut

> 
> Regards,
> 
> 						- Ted


WARNING: multiple messages have this Message-ID (diff)
From: knut.omang at oracle.com (Knut Omang)
Subject: [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework
Date: Thu, 09 May 2019 16:48:51 +0200	[thread overview]
Message-ID: <3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com> (raw)
In-Reply-To: <20190509133551.GD29703@mit.edu>

On Thu, 2019-05-09 at 09:35 -0400, Theodore Ts'o wrote:
> On Thu, May 09, 2019 at 01:52:15PM +0200, Knut Omang wrote:
> > 1) Tests that exercises typically algorithmic or intricate, complex
> >    code with relatively few outside dependencies, or where the dependencies 
> >    are considered worth mocking, such as the basics of container data 
> >    structures or page table code. If I get you right, Ted, the tests 
> >    you refer to in this thread are such tests. I believe covering this space 
> >    is the goal Brendan has in mind for KUnit.
> 
> Yes, that's correct.  I'd also add that one of the key differences is
> that it sounds like Frank and you are coming from the perspective of
> testing *device drivers* where in general there aren't a lot of
> complex code which is hardware independent.  After all, the vast
> majority of device drivers are primarily interface code to hardware,
> with as much as possible abstracted away to common code.  (Take, for
> example, the model of the SCSI layer; or all of the kobject code.)
>
> > 2) Tests that exercises interaction between a module under test and other 
> >    parts of the kernel, such as testing intricacies of the interaction of 
> >    a driver or file system with the rest of the kernel, and with hardware, 
> >    whether that is real hardware or a model/emulation. 
> >    Using your testing needs as example again, Ted, from my shallow understanding,
> >    you have such needs within the context of xfstests (
> https://github.com/tytso/xfstests)
> 
> Well, upstream is for xfstests is git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git

Thanks for the correction!

> The test framework where I can run 20 hours worth of xfstests
> (multiple file system features enabled, multiple mount options, etc.)
> in 3 hours of wall clock time using multiple cloud VM is something
> called gce-xfstests.
> 
> I also have kvm-xfstests, which optimizes low test latency, where I
> want to run a one or a small number of tests with a minimum of
> overhead --- gce startup and shutdown is around 2 minutes, where as
> kvm startup and shutdown is about 7 seconds.  As far as I'm concerned,
> 7 seconds is still too slow, but that's the best I've been able to do
> given all of the other things I want a test framework to do, including
> archiving test results, parsing the test results so it's easy to
> interpret, etc.  Both kvm-xfstests and gce-xfstests are located at:
> 
> 	git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
> 
> So if Frank's primary argument is "too many frameworks", it's already
> too late.  The block layer has blktests has a seprate framework,
> called blktests --- and yeah, it's a bit painful to launch or learn
> how to set things up.

I agree at that level - and the good thing is that there are a lot to learn 
from looking at other people's ways - but working towards unification rather than even
more similar, but subtly different ways I think is a good thing anyway!

> That's why I added support to run blktests using gce-xfstests and
> kvm-xfstests, so that "gce-xfstests --blktests" or "kvm-xfstests
> --xfstests" will pluck a kernel from your build tree, and launch at
> test appliance VM using that kernel and run the block layer tests.
> 
> The point is we *already* have multiple test frameworks, which are
> optimized for testing different parts of the kernel.  And if you plan
> to do a lot of work in these parts of the kernel, you're going to have
> to learn how to use some other test framework other than kselftest.
> Sorry, that's just the way it goes.
> 
> Of course, I'll accept trivial patches that haven't been tested using
> xfstests --- but that's because I can trivially run the smoke test for
> you.  Of course, if I get a lot of patches from a contributor which
> cause test regressions, I'll treat them much like someone who
> contribute patches which fail to build.  I'll apply pressure to the
> contributor to actually build test, or run a ten minute kvm-xfstests
> smoke test.  Part of the reason why I feel comfortable to do this is
> it's really easy to run the smoke test.  There are pre-compiled test
> appliances, and a lot of documentation:
> 
> https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md
> 
> This is why I have close to zero sympathy to Frank's complaint that
> extra test frameworks are a bad thing.  To me, that's whining.  I've
> done a huge amount of work to meet contributors more than half-way.
> The insistence that "There Must Be One", ala the Highlander movie, is
> IMHO so wrong that it's not even close.  Is it really that hard to do
> a "git pull", download a test appliance, set up a config file to tell
> kvm-xfstests where to find your build tree, and then run "kvm-xfstests
> --smoke" or "gce-xfstests --smoke"?  Cry me a river.
> 
> There are already multiple test frameworks, and if you expect to do a
> lot of work in a particular subsystem, you'll be expected to use the
> Maintainer's choice of tests.  Deal with it.  We do this so we can
> scale to the number of contributors we have in our subsystem.
> 
> > To 1) I agree with Frank in that the problem with using UML is that you still have to
> > relate to the complexity of a kernel run time system, while what you really want for
> these
> > types of tests is just to compile a couple of kernel source files in a normal user
> land
> > context, to allow the use of Valgrind and other user space tools on the code.
> 
> "Just compiling a couple of kernel source files in a normal user land"
> is much harder than you think.  It requires writing vast numbers of
> mocking functions --- for a file system I would have to simulate the
> block device layer, large portions of the VFS layer, the scheduler and
> the locking layer if I want to test locking bugs, etc., etc.  In
> practice, UML itself is serving as mocking layer, by its mere
> existence.  

I might not see the full picture here wrt file system testing, 
but I do know exactly how difficult it is to do it for that ~29,000 
lines of code Infiniband driver I was working on, since actually I did it
with several versions of the kernel. Anyway that's probably more of a 
topic for a talk than an email thread :-)

> So when Frank says that KUnit doesn't provide any mocking
> functions, I don't at all agree.  Using KUnit and UML makes testing
> internal interfaces *far* simpler, especially if the comparison is
> "just compile some kernel source files as part of a userspace test
> program".
> 
> Perhaps your and Frank's experience is different --- perhaps that can
> be explained by your past experience and interest in testing device
> drivers as opposed to file systems.
> 
> The other thing I'd add is that at least for me, a really important
> consideration is how quickly we can run tests.  I consider
> minimization of developer friction (e.g., all you need to do is
> running "make ; kvm-xfstests --smoke" to run tests), and maximizing
> developer velocity to be high priority goals.  Developer velocity is
> how quickly can you run the tests; ideally, less than 5-10 seconds.

I completely agree on that one. I think a fundamental feature of any 
framework at this level is that it should be usable as developer tests as part
of an efficient work cycle.

> And that's the other reason why I consider unit tests to be a
> complement to integration tests.  "gce-xfstests --smoke" takes 10-15
> minutes.  If I can have unit tests which takes 5-15 seconds for a
> smoke test of the specific part of ext4 that I am modifying (and often
> with much better coverage than integration tests from userspace),
> that's at really big deal.  I can do this for e2fsprogs; but if I have
> to launch a VM, the VM overhead pretty much eats all or most of that
> time budget right there.

This is exactly the way we work with KTF as well: 
Change the kernel module under test, and/or the test code, 
compile, unload/load modules and run the tests again, all within seconds.
The overhead of rebooting one or more VMs (network tests sometimes 
require more than one node) or even a physical system, 
if the issue cannot be reproduced without running non-virtualized, 
would only be necessary if the test causes an oops or other crash 
that prevents the unload/load path.

> From looking at your documentation of KTF, you are targetting the use
> case of continuous testing.  That's a different testing scenario than
> what I'm describing; with continuous testing, overhead measured in
> minutes or even tens of minutes is not a big deal.  But if you are
> trying to do real-time testing as part of your development process ---
> *real* Test Driven Development, then test latency is a really big
> deal.

My experience is that unless one can enforce tests to be run on 
everyone else's changes as well, one often ends up having to pursue the bugs 
introduced by others but caught by the tests, so I believe automation and 
unit/low level testing really should go hand in hand. This is the reason for 
the emphasis on automation in the KTF docs, but the primary driver for me has 
always been as a developer toolkit.

> I'll grant that for people who are working on device drivers where
> architecture dependencies are a big deal, building for an architecture
> where you can run in a virtual environment or using test hardware is
> going to be a better way to go.  And Brendan has said he's willing to
> look at adapting KUnit so it can be built for use in a virtual
> environment to accomodate your requirements.
> 
> As far as I'm concerned, however, I would *not* be interested in KTF
> unless you could demonstrate to me that launching at test VM, somehow
> getting the kernel modules copied into the VM, and running the tests
> as kernel modules, has zero overhead compared to using UML.

As you alluded to above, the development cycle time is really the crucial 
thing here - if what you get has more value to you, then you'd be willing 
to wait just a few more seconds for it. And IMHO the real interesting notion of 
time is the time from saving the changes until you can verify that 
the test either passes, or even more important: Why it failed..

> Ultimately, I'm a pragmatist.  If KTF serves your needs best, good for
> you.  If other approaches are better for other parts of the kernel,
> let's not try to impose a strict "There Must Be Only One" religion.
> That's already not true today, and for good reason.  There are many
> different kinds of kernel code, and many different types of test
> philosophies.  Trying to force all kernel testing into a single
> Procrustean Bed is simply not productive.

I definitely pragmatically prefer evolution over revolution myself, 
no doubt about that, and I definitely appreciate this detailed view seen from the 
filesystem side,

Thanks!
Knut

> 
> Regards,
> 
> 						- Ted

WARNING: multiple messages have this Message-ID (diff)
From: knut.omang@oracle.com (Knut Omang)
Subject: [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework
Date: Thu, 09 May 2019 16:48:51 +0200	[thread overview]
Message-ID: <3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com> (raw)
Message-ID: <20190509144851.mSS9iz4ay9O9qxUa1KdwgvCV2Z4-VH8eSeWWKjZVv-c@z> (raw)
In-Reply-To: <20190509133551.GD29703@mit.edu>

On Thu, 2019-05-09@09:35 -0400, Theodore Ts'o wrote:
> On Thu, May 09, 2019@01:52:15PM +0200, Knut Omang wrote:
> > 1) Tests that exercises typically algorithmic or intricate, complex
> >    code with relatively few outside dependencies, or where the dependencies 
> >    are considered worth mocking, such as the basics of container data 
> >    structures or page table code. If I get you right, Ted, the tests 
> >    you refer to in this thread are such tests. I believe covering this space 
> >    is the goal Brendan has in mind for KUnit.
> 
> Yes, that's correct.  I'd also add that one of the key differences is
> that it sounds like Frank and you are coming from the perspective of
> testing *device drivers* where in general there aren't a lot of
> complex code which is hardware independent.  After all, the vast
> majority of device drivers are primarily interface code to hardware,
> with as much as possible abstracted away to common code.  (Take, for
> example, the model of the SCSI layer; or all of the kobject code.)
>
> > 2) Tests that exercises interaction between a module under test and other 
> >    parts of the kernel, such as testing intricacies of the interaction of 
> >    a driver or file system with the rest of the kernel, and with hardware, 
> >    whether that is real hardware or a model/emulation. 
> >    Using your testing needs as example again, Ted, from my shallow understanding,
> >    you have such needs within the context of xfstests (
> https://github.com/tytso/xfstests)
> 
> Well, upstream is for xfstests is git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git

Thanks for the correction!

> The test framework where I can run 20 hours worth of xfstests
> (multiple file system features enabled, multiple mount options, etc.)
> in 3 hours of wall clock time using multiple cloud VM is something
> called gce-xfstests.
> 
> I also have kvm-xfstests, which optimizes low test latency, where I
> want to run a one or a small number of tests with a minimum of
> overhead --- gce startup and shutdown is around 2 minutes, where as
> kvm startup and shutdown is about 7 seconds.  As far as I'm concerned,
> 7 seconds is still too slow, but that's the best I've been able to do
> given all of the other things I want a test framework to do, including
> archiving test results, parsing the test results so it's easy to
> interpret, etc.  Both kvm-xfstests and gce-xfstests are located at:
> 
> 	git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
> 
> So if Frank's primary argument is "too many frameworks", it's already
> too late.  The block layer has blktests has a seprate framework,
> called blktests --- and yeah, it's a bit painful to launch or learn
> how to set things up.

I agree at that level - and the good thing is that there are a lot to learn 
from looking at other people's ways - but working towards unification rather than even
more similar, but subtly different ways I think is a good thing anyway!

> That's why I added support to run blktests using gce-xfstests and
> kvm-xfstests, so that "gce-xfstests --blktests" or "kvm-xfstests
> --xfstests" will pluck a kernel from your build tree, and launch at
> test appliance VM using that kernel and run the block layer tests.
> 
> The point is we *already* have multiple test frameworks, which are
> optimized for testing different parts of the kernel.  And if you plan
> to do a lot of work in these parts of the kernel, you're going to have
> to learn how to use some other test framework other than kselftest.
> Sorry, that's just the way it goes.
> 
> Of course, I'll accept trivial patches that haven't been tested using
> xfstests --- but that's because I can trivially run the smoke test for
> you.  Of course, if I get a lot of patches from a contributor which
> cause test regressions, I'll treat them much like someone who
> contribute patches which fail to build.  I'll apply pressure to the
> contributor to actually build test, or run a ten minute kvm-xfstests
> smoke test.  Part of the reason why I feel comfortable to do this is
> it's really easy to run the smoke test.  There are pre-compiled test
> appliances, and a lot of documentation:
> 
> https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md
> 
> This is why I have close to zero sympathy to Frank's complaint that
> extra test frameworks are a bad thing.  To me, that's whining.  I've
> done a huge amount of work to meet contributors more than half-way.
> The insistence that "There Must Be One", ala the Highlander movie, is
> IMHO so wrong that it's not even close.  Is it really that hard to do
> a "git pull", download a test appliance, set up a config file to tell
> kvm-xfstests where to find your build tree, and then run "kvm-xfstests
> --smoke" or "gce-xfstests --smoke"?  Cry me a river.
> 
> There are already multiple test frameworks, and if you expect to do a
> lot of work in a particular subsystem, you'll be expected to use the
> Maintainer's choice of tests.  Deal with it.  We do this so we can
> scale to the number of contributors we have in our subsystem.
> 
> > To 1) I agree with Frank in that the problem with using UML is that you still have to
> > relate to the complexity of a kernel run time system, while what you really want for
> these
> > types of tests is just to compile a couple of kernel source files in a normal user
> land
> > context, to allow the use of Valgrind and other user space tools on the code.
> 
> "Just compiling a couple of kernel source files in a normal user land"
> is much harder than you think.  It requires writing vast numbers of
> mocking functions --- for a file system I would have to simulate the
> block device layer, large portions of the VFS layer, the scheduler and
> the locking layer if I want to test locking bugs, etc., etc.  In
> practice, UML itself is serving as mocking layer, by its mere
> existence.  

I might not see the full picture here wrt file system testing, 
but I do know exactly how difficult it is to do it for that ~29,000 
lines of code Infiniband driver I was working on, since actually I did it
with several versions of the kernel. Anyway that's probably more of a 
topic for a talk than an email thread :-)

> So when Frank says that KUnit doesn't provide any mocking
> functions, I don't at all agree.  Using KUnit and UML makes testing
> internal interfaces *far* simpler, especially if the comparison is
> "just compile some kernel source files as part of a userspace test
> program".
> 
> Perhaps your and Frank's experience is different --- perhaps that can
> be explained by your past experience and interest in testing device
> drivers as opposed to file systems.
> 
> The other thing I'd add is that at least for me, a really important
> consideration is how quickly we can run tests.  I consider
> minimization of developer friction (e.g., all you need to do is
> running "make ; kvm-xfstests --smoke" to run tests), and maximizing
> developer velocity to be high priority goals.  Developer velocity is
> how quickly can you run the tests; ideally, less than 5-10 seconds.

I completely agree on that one. I think a fundamental feature of any 
framework at this level is that it should be usable as developer tests as part
of an efficient work cycle.

> And that's the other reason why I consider unit tests to be a
> complement to integration tests.  "gce-xfstests --smoke" takes 10-15
> minutes.  If I can have unit tests which takes 5-15 seconds for a
> smoke test of the specific part of ext4 that I am modifying (and often
> with much better coverage than integration tests from userspace),
> that's at really big deal.  I can do this for e2fsprogs; but if I have
> to launch a VM, the VM overhead pretty much eats all or most of that
> time budget right there.

This is exactly the way we work with KTF as well: 
Change the kernel module under test, and/or the test code, 
compile, unload/load modules and run the tests again, all within seconds.
The overhead of rebooting one or more VMs (network tests sometimes 
require more than one node) or even a physical system, 
if the issue cannot be reproduced without running non-virtualized, 
would only be necessary if the test causes an oops or other crash 
that prevents the unload/load path.

> From looking at your documentation of KTF, you are targetting the use
> case of continuous testing.  That's a different testing scenario than
> what I'm describing; with continuous testing, overhead measured in
> minutes or even tens of minutes is not a big deal.  But if you are
> trying to do real-time testing as part of your development process ---
> *real* Test Driven Development, then test latency is a really big
> deal.

My experience is that unless one can enforce tests to be run on 
everyone else's changes as well, one often ends up having to pursue the bugs 
introduced by others but caught by the tests, so I believe automation and 
unit/low level testing really should go hand in hand. This is the reason for 
the emphasis on automation in the KTF docs, but the primary driver for me has 
always been as a developer toolkit.

> I'll grant that for people who are working on device drivers where
> architecture dependencies are a big deal, building for an architecture
> where you can run in a virtual environment or using test hardware is
> going to be a better way to go.  And Brendan has said he's willing to
> look at adapting KUnit so it can be built for use in a virtual
> environment to accomodate your requirements.
> 
> As far as I'm concerned, however, I would *not* be interested in KTF
> unless you could demonstrate to me that launching at test VM, somehow
> getting the kernel modules copied into the VM, and running the tests
> as kernel modules, has zero overhead compared to using UML.

As you alluded to above, the development cycle time is really the crucial 
thing here - if what you get has more value to you, then you'd be willing 
to wait just a few more seconds for it. And IMHO the real interesting notion of 
time is the time from saving the changes until you can verify that 
the test either passes, or even more important: Why it failed..

> Ultimately, I'm a pragmatist.  If KTF serves your needs best, good for
> you.  If other approaches are better for other parts of the kernel,
> let's not try to impose a strict "There Must Be Only One" religion.
> That's already not true today, and for good reason.  There are many
> different kinds of kernel code, and many different types of test
> philosophies.  Trying to force all kernel testing into a single
> Procrustean Bed is simply not productive.

I definitely pragmatically prefer evolution over revolution myself, 
no doubt about that, and I definitely appreciate this detailed view seen from the 
filesystem side,

Thanks!
Knut

> 
> Regards,
> 
> 						- Ted

WARNING: multiple messages have this Message-ID (diff)
From: Knut Omang <knut.omang@oracle.com>
To: Theodore Ts'o <tytso@mit.edu>
Cc: pmladek@suse.com, linux-doc@vger.kernel.org, amir73il@gmail.com,
	Brendan Higgins <brendanhiggins@google.com>,
	dri-devel@lists.freedesktop.org, Alexander.Levin@microsoft.com,
	mpe@ellerman.id.au, linux-kselftest@vger.kernel.org,
	shuah@kernel.org, robh@kernel.org, linux-nvdimm@lists.01.org,
	Frank Rowand <frowand.list@gmail.com>,
	kieran.bingham@ideasonboard.com, wfg@linux.intel.com,
	joel@jms.id.au, rientjes@google.com, jdike@addtoit.com,
	dan.carpenter@oracle.com, devicetree@vger.kernel.org,
	linux-kbuild@vger.kernel.org, Tim.Bird@sony.com,
	linux-um@lists.infradead.org, rostedt@goodmis.org,
	julia.lawall@lip6.fr, dan.j.williams@intel.com,
	kunit-dev@googlegroups.com, richard@nod.at, sboyd@kernel.org,
	Greg KH <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, mcgrof@kernel.org, daniel@ffwll.ch,
	keescook@google.com, linux-fsdevel@vger.kernel.org,
	logang@deltatee.com, khilman@baylibre.com
Subject: Re: [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework
Date: Thu, 09 May 2019 16:48:51 +0200	[thread overview]
Message-ID: <3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com> (raw)
In-Reply-To: <20190509133551.GD29703@mit.edu>

On Thu, 2019-05-09 at 09:35 -0400, Theodore Ts'o wrote:
> On Thu, May 09, 2019 at 01:52:15PM +0200, Knut Omang wrote:
> > 1) Tests that exercises typically algorithmic or intricate, complex
> >    code with relatively few outside dependencies, or where the dependencies 
> >    are considered worth mocking, such as the basics of container data 
> >    structures or page table code. If I get you right, Ted, the tests 
> >    you refer to in this thread are such tests. I believe covering this space 
> >    is the goal Brendan has in mind for KUnit.
> 
> Yes, that's correct.  I'd also add that one of the key differences is
> that it sounds like Frank and you are coming from the perspective of
> testing *device drivers* where in general there aren't a lot of
> complex code which is hardware independent.  After all, the vast
> majority of device drivers are primarily interface code to hardware,
> with as much as possible abstracted away to common code.  (Take, for
> example, the model of the SCSI layer; or all of the kobject code.)
>
> > 2) Tests that exercises interaction between a module under test and other 
> >    parts of the kernel, such as testing intricacies of the interaction of 
> >    a driver or file system with the rest of the kernel, and with hardware, 
> >    whether that is real hardware or a model/emulation. 
> >    Using your testing needs as example again, Ted, from my shallow understanding,
> >    you have such needs within the context of xfstests (
> https://github.com/tytso/xfstests)
> 
> Well, upstream is for xfstests is git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git

Thanks for the correction!

> The test framework where I can run 20 hours worth of xfstests
> (multiple file system features enabled, multiple mount options, etc.)
> in 3 hours of wall clock time using multiple cloud VM is something
> called gce-xfstests.
> 
> I also have kvm-xfstests, which optimizes low test latency, where I
> want to run a one or a small number of tests with a minimum of
> overhead --- gce startup and shutdown is around 2 minutes, where as
> kvm startup and shutdown is about 7 seconds.  As far as I'm concerned,
> 7 seconds is still too slow, but that's the best I've been able to do
> given all of the other things I want a test framework to do, including
> archiving test results, parsing the test results so it's easy to
> interpret, etc.  Both kvm-xfstests and gce-xfstests are located at:
> 
> 	git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git
> 
> So if Frank's primary argument is "too many frameworks", it's already
> too late.  The block layer has blktests has a seprate framework,
> called blktests --- and yeah, it's a bit painful to launch or learn
> how to set things up.

I agree at that level - and the good thing is that there are a lot to learn 
from looking at other people's ways - but working towards unification rather than even
more similar, but subtly different ways I think is a good thing anyway!

> That's why I added support to run blktests using gce-xfstests and
> kvm-xfstests, so that "gce-xfstests --blktests" or "kvm-xfstests
> --xfstests" will pluck a kernel from your build tree, and launch at
> test appliance VM using that kernel and run the block layer tests.
> 
> The point is we *already* have multiple test frameworks, which are
> optimized for testing different parts of the kernel.  And if you plan
> to do a lot of work in these parts of the kernel, you're going to have
> to learn how to use some other test framework other than kselftest.
> Sorry, that's just the way it goes.
> 
> Of course, I'll accept trivial patches that haven't been tested using
> xfstests --- but that's because I can trivially run the smoke test for
> you.  Of course, if I get a lot of patches from a contributor which
> cause test regressions, I'll treat them much like someone who
> contribute patches which fail to build.  I'll apply pressure to the
> contributor to actually build test, or run a ten minute kvm-xfstests
> smoke test.  Part of the reason why I feel comfortable to do this is
> it's really easy to run the smoke test.  There are pre-compiled test
> appliances, and a lot of documentation:
> 
> https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md
> 
> This is why I have close to zero sympathy to Frank's complaint that
> extra test frameworks are a bad thing.  To me, that's whining.  I've
> done a huge amount of work to meet contributors more than half-way.
> The insistence that "There Must Be One", ala the Highlander movie, is
> IMHO so wrong that it's not even close.  Is it really that hard to do
> a "git pull", download a test appliance, set up a config file to tell
> kvm-xfstests where to find your build tree, and then run "kvm-xfstests
> --smoke" or "gce-xfstests --smoke"?  Cry me a river.
> 
> There are already multiple test frameworks, and if you expect to do a
> lot of work in a particular subsystem, you'll be expected to use the
> Maintainer's choice of tests.  Deal with it.  We do this so we can
> scale to the number of contributors we have in our subsystem.
> 
> > To 1) I agree with Frank in that the problem with using UML is that you still have to
> > relate to the complexity of a kernel run time system, while what you really want for
> these
> > types of tests is just to compile a couple of kernel source files in a normal user
> land
> > context, to allow the use of Valgrind and other user space tools on the code.
> 
> "Just compiling a couple of kernel source files in a normal user land"
> is much harder than you think.  It requires writing vast numbers of
> mocking functions --- for a file system I would have to simulate the
> block device layer, large portions of the VFS layer, the scheduler and
> the locking layer if I want to test locking bugs, etc., etc.  In
> practice, UML itself is serving as mocking layer, by its mere
> existence.  

I might not see the full picture here wrt file system testing, 
but I do know exactly how difficult it is to do it for that ~29,000 
lines of code Infiniband driver I was working on, since actually I did it
with several versions of the kernel. Anyway that's probably more of a 
topic for a talk than an email thread :-)

> So when Frank says that KUnit doesn't provide any mocking
> functions, I don't at all agree.  Using KUnit and UML makes testing
> internal interfaces *far* simpler, especially if the comparison is
> "just compile some kernel source files as part of a userspace test
> program".
> 
> Perhaps your and Frank's experience is different --- perhaps that can
> be explained by your past experience and interest in testing device
> drivers as opposed to file systems.
> 
> The other thing I'd add is that at least for me, a really important
> consideration is how quickly we can run tests.  I consider
> minimization of developer friction (e.g., all you need to do is
> running "make ; kvm-xfstests --smoke" to run tests), and maximizing
> developer velocity to be high priority goals.  Developer velocity is
> how quickly can you run the tests; ideally, less than 5-10 seconds.

I completely agree on that one. I think a fundamental feature of any 
framework at this level is that it should be usable as developer tests as part
of an efficient work cycle.

> And that's the other reason why I consider unit tests to be a
> complement to integration tests.  "gce-xfstests --smoke" takes 10-15
> minutes.  If I can have unit tests which takes 5-15 seconds for a
> smoke test of the specific part of ext4 that I am modifying (and often
> with much better coverage than integration tests from userspace),
> that's at really big deal.  I can do this for e2fsprogs; but if I have
> to launch a VM, the VM overhead pretty much eats all or most of that
> time budget right there.

This is exactly the way we work with KTF as well: 
Change the kernel module under test, and/or the test code, 
compile, unload/load modules and run the tests again, all within seconds.
The overhead of rebooting one or more VMs (network tests sometimes 
require more than one node) or even a physical system, 
if the issue cannot be reproduced without running non-virtualized, 
would only be necessary if the test causes an oops or other crash 
that prevents the unload/load path.

> From looking at your documentation of KTF, you are targetting the use
> case of continuous testing.  That's a different testing scenario than
> what I'm describing; with continuous testing, overhead measured in
> minutes or even tens of minutes is not a big deal.  But if you are
> trying to do real-time testing as part of your development process ---
> *real* Test Driven Development, then test latency is a really big
> deal.

My experience is that unless one can enforce tests to be run on 
everyone else's changes as well, one often ends up having to pursue the bugs 
introduced by others but caught by the tests, so I believe automation and 
unit/low level testing really should go hand in hand. This is the reason for 
the emphasis on automation in the KTF docs, but the primary driver for me has 
always been as a developer toolkit.

> I'll grant that for people who are working on device drivers where
> architecture dependencies are a big deal, building for an architecture
> where you can run in a virtual environment or using test hardware is
> going to be a better way to go.  And Brendan has said he's willing to
> look at adapting KUnit so it can be built for use in a virtual
> environment to accomodate your requirements.
> 
> As far as I'm concerned, however, I would *not* be interested in KTF
> unless you could demonstrate to me that launching at test VM, somehow
> getting the kernel modules copied into the VM, and running the tests
> as kernel modules, has zero overhead compared to using UML.

As you alluded to above, the development cycle time is really the crucial 
thing here - if what you get has more value to you, then you'd be willing 
to wait just a few more seconds for it. And IMHO the real interesting notion of 
time is the time from saving the changes until you can verify that 
the test either passes, or even more important: Why it failed..

> Ultimately, I'm a pragmatist.  If KTF serves your needs best, good for
> you.  If other approaches are better for other parts of the kernel,
> let's not try to impose a strict "There Must Be Only One" religion.
> That's already not true today, and for good reason.  There are many
> different kinds of kernel code, and many different types of test
> philosophies.  Trying to force all kernel testing into a single
> Procrustean Bed is simply not productive.

I definitely pragmatically prefer evolution over revolution myself, 
no doubt about that, and I definitely appreciate this detailed view seen from the 
filesystem side,

Thanks!
Knut

> 
> Regards,
> 
> 						- Ted


_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um


  parent reply	other threads:[~2019-05-09 14:48 UTC|newest]

Thread overview: 694+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-01 23:01 [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework Brendan Higgins
2019-05-01 23:01 ` Brendan Higgins
2019-05-01 23:01 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
2019-05-01 23:01 ` [PATCH v2 01/17] kunit: test: add KUnit test runner core Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 02/17] kunit: test: add test resource management API Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01 ` [PATCH v2 03/17] kunit: test: add string_stream a std::stream like string builder Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
     [not found]   ` <20190501230126.229218-4-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-05-03  1:26     ` shuah
2019-05-03  1:26       ` shuah
2019-05-03  1:26       ` shuah
2019-05-03  1:26       ` shuah
2019-05-03  1:26       ` shuah
2019-05-03  4:37       ` Brendan Higgins
2019-05-03  4:37         ` Brendan Higgins
2019-05-03  4:37         ` Brendan Higgins
2019-05-03  4:37         ` brendanhiggins
2019-05-03  4:37         ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 04/17] kunit: test: add kunit_stream a std::stream like logger Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-02 11:00   ` Greg KH
2019-05-02 11:00     ` Greg KH
2019-05-02 11:00     ` Greg KH
2019-05-02 11:00     ` gregkh
2019-05-02 11:00     ` Greg KH
2019-05-02 20:25     ` Brendan Higgins
2019-05-02 20:25       ` Brendan Higgins
2019-05-02 20:25       ` Brendan Higgins
2019-05-02 20:25       ` brendanhiggins
2019-05-02 20:25       ` Brendan Higgins
2019-05-02 21:18       ` Frank Rowand
2019-05-02 21:18         ` Frank Rowand
2019-05-02 21:18         ` Frank Rowand
2019-05-02 21:18         ` frowand.list
2019-05-02 21:18         ` Frank Rowand
2019-05-02 21:18         ` Frank Rowand
2019-05-03  1:50   ` shuah
2019-05-03  1:50     ` shuah
2019-05-03  1:50     ` shuah
2019-05-03  1:50     ` shuah
2019-05-03  5:48     ` Brendan Higgins
2019-05-03  5:48       ` Brendan Higgins
2019-05-03  5:48       ` Brendan Higgins
2019-05-03  5:48       ` brendanhiggins
2019-05-03  5:48       ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 05/17] kunit: test: add the concept of expectations Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01 ` [PATCH v2 06/17] kbuild: enable building KUnit Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-10  3:03   ` Masahiro Yamada
2019-05-10  3:03     ` Masahiro Yamada
2019-05-10  3:03     ` Masahiro Yamada
2019-05-10  3:03     ` Masahiro Yamada
2019-05-10  3:03     ` yamada.masahiro
2019-05-10  3:03     ` Masahiro Yamada
     [not found]     ` <CAK7LNAQ+SRMn8UFjW1dZv_TrL0qjD2v2S=rXgtUpiA-urr1DDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-10 10:27       ` Brendan Higgins
2019-05-10 10:27         ` Brendan Higgins
2019-05-10 10:27         ` Brendan Higgins
2019-05-10 10:27         ` Brendan Higgins
2019-05-10 10:27         ` brendanhiggins
2019-05-10 10:27         ` Brendan Higgins
2019-05-10 10:30         ` Masahiro Yamada
2019-05-10 10:30           ` Masahiro Yamada
2019-05-10 10:30           ` Masahiro Yamada
2019-05-10 10:30           ` Masahiro Yamada
2019-05-10 10:30           ` yamada.masahiro
2019-05-10 10:30           ` Masahiro Yamada
2019-05-10 10:33           ` Brendan Higgins
2019-05-10 10:33             ` Brendan Higgins
2019-05-10 10:33             ` Brendan Higgins
2019-05-10 10:33             ` Brendan Higgins
2019-05-10 10:33             ` brendanhiggins
2019-05-10 10:33             ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 07/17] kunit: test: add initial tests Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-02 10:58   ` Greg KH
2019-05-02 10:58     ` Greg KH
2019-05-02 10:58     ` Greg KH
2019-05-02 10:58     ` gregkh
2019-05-02 10:58     ` Greg KH
2019-05-02 20:30     ` Brendan Higgins
2019-05-02 20:30       ` Brendan Higgins
2019-05-02 20:30       ` Brendan Higgins
2019-05-02 20:30       ` brendanhiggins
2019-05-02 20:30       ` Brendan Higgins
2019-05-03  1:27   ` shuah
2019-05-03  1:27     ` shuah
2019-05-03  1:27     ` shuah
2019-05-03  1:27     ` shuah
     [not found]     ` <d4934565-9b41-880e-3bbe-984224b50fac-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2019-05-03  5:18       ` Brendan Higgins
2019-05-03  5:18         ` Brendan Higgins
2019-05-03  5:18         ` Brendan Higgins
2019-05-03  5:18         ` brendanhiggins
2019-05-03  5:18         ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 08/17] kunit: test: add support for test abort Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
     [not found]   ` <20190501230126.229218-9-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-05-03  3:14     ` Logan Gunthorpe
2019-05-03  3:14       ` Logan Gunthorpe
2019-05-03  3:14       ` Logan Gunthorpe
2019-05-03  3:14       ` logang
2019-05-03  3:14       ` Logan Gunthorpe
2019-05-03  6:48       ` Brendan Higgins
2019-05-03  6:48         ` Brendan Higgins
2019-05-03  6:48         ` Brendan Higgins
2019-05-03  6:48         ` brendanhiggins
2019-05-03  6:48         ` Brendan Higgins
     [not found]         ` <CAFd5g47hxAd=+72xbPJbWPdZCXRXmtLpsGhUh=zc7MSwfcaGJQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-03 12:33           ` Logan Gunthorpe
2019-05-03 12:33             ` Logan Gunthorpe
2019-05-03 12:33             ` Logan Gunthorpe
2019-05-03 12:33             ` logang
2019-05-03 12:33             ` Logan Gunthorpe
2019-05-06  8:48             ` Brendan Higgins
2019-05-06  8:48               ` Brendan Higgins
2019-05-06  8:48               ` Brendan Higgins
2019-05-06  8:48               ` brendanhiggins
2019-05-06  8:48               ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 09/17] kunit: test: add tests for kunit " Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01 ` [PATCH v2 10/17] kunit: test: add the concept of assertions Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01 ` [PATCH v2 11/17] kunit: test: add test managed resource tests Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-03 14:34   ` shuah
2019-05-03 14:34     ` shuah
2019-05-03 14:34     ` shuah
2019-05-03 14:34     ` shuah
2019-05-06  9:03     ` Brendan Higgins
2019-05-06  9:03       ` Brendan Higgins
2019-05-06  9:03       ` brendanhiggins
2019-05-06  9:03       ` Brendan Higgins
2019-05-01 23:01 ` [PATCH v2 12/17] kunit: tool: add Python wrappers for running KUnit tests Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-02 11:02   ` Greg KH
2019-05-02 11:02     ` Greg KH
2019-05-02 11:02     ` Greg KH
2019-05-02 11:02     ` gregkh
2019-05-02 11:02     ` Greg KH
2019-05-02 18:07     ` Brendan Higgins
2019-05-02 18:07       ` Brendan Higgins
2019-05-02 18:07       ` Brendan Higgins
2019-05-02 18:07       ` brendanhiggins
2019-05-02 18:07       ` Brendan Higgins
2019-05-02 21:16       ` Frank Rowand
2019-05-02 21:16         ` Frank Rowand
2019-05-02 21:16         ` Frank Rowand
2019-05-02 21:16         ` frowand.list
2019-05-02 21:16         ` Frank Rowand
     [not found]         ` <a49c5088-a821-210c-66de-f422536f5b01-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-02 23:45           ` Brendan Higgins
2019-05-02 23:45             ` Brendan Higgins
2019-05-02 23:45             ` Brendan Higgins
2019-05-02 23:45             ` brendanhiggins
2019-05-02 23:45             ` Brendan Higgins
     [not found]             ` <CAFd5g44iWRchQKdJYtjRtPY6e-6e0eXpKXXsx5Ooi6sWE474KA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-03  1:45               ` Frank Rowand
2019-05-03  1:45                 ` Frank Rowand
2019-05-03  1:45                 ` Frank Rowand
2019-05-03  1:45                 ` frowand.list
2019-05-03  1:45                 ` Frank Rowand
2019-05-03  5:36                 ` Brendan Higgins
2019-05-03  5:36                   ` Brendan Higgins
2019-05-03  5:36                   ` Brendan Higgins
2019-05-03  5:36                   ` brendanhiggins
2019-05-03  5:36                   ` Brendan Higgins
2019-05-03 18:59                   ` Frank Rowand
2019-05-03 18:59                     ` Frank Rowand
2019-05-03 18:59                     ` Frank Rowand
2019-05-03 18:59                     ` frowand.list
2019-05-03 18:59                     ` Frank Rowand
     [not found]                     ` <052fa196-4ea9-8384-79b7-fe6bacc0ee82-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-03 23:14                       ` Brendan Higgins
2019-05-03 23:14                         ` Brendan Higgins
2019-05-03 23:14                         ` Brendan Higgins
2019-05-03 23:14                         ` brendanhiggins
2019-05-03 23:14                         ` Brendan Higgins
2019-05-04 10:42                         ` Greg KH
2019-05-04 10:42                           ` Greg KH
2019-05-04 10:42                           ` Greg KH
2019-05-04 10:42                           ` gregkh
2019-05-04 10:42                           ` Greg KH
     [not found]                         ` <CAFd5g47aY-CL+d7DfiyTidY4aAVY+eg1TM1UJ4nYqKSfHOi-0w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-06  0:19                           ` Frank Rowand
2019-05-06  0:19                             ` Frank Rowand
2019-05-06  0:19                             ` Frank Rowand
2019-05-06  0:19                             ` frowand.list
2019-05-06  0:19                             ` Frank Rowand
2019-05-06 17:43                             ` Kees Cook
2019-05-06 17:43                               ` Kees Cook
2019-05-06 17:43                               ` Kees Cook
2019-05-06 17:43                               ` Kees Cook
2019-05-06 17:43                               ` keescook
2019-05-06 17:43                               ` Kees Cook
2019-05-06 21:42                               ` Brendan Higgins
2019-05-06 21:42                                 ` Brendan Higgins
2019-05-06 21:42                                 ` Brendan Higgins
2019-05-06 21:42                                 ` Brendan Higgins
2019-05-06 21:42                                 ` brendanhiggins
2019-05-06 21:42                                 ` Brendan Higgins
2019-05-06 21:39                             ` Brendan Higgins
2019-05-06 21:39                               ` Brendan Higgins
2019-05-06 21:39                               ` Brendan Higgins
2019-05-06 21:39                               ` brendanhiggins
2019-05-06 21:39                               ` Brendan Higgins
     [not found]                               ` <CAFd5g46=ZU58uJ=Qhs3soBzJjzJKJFY0_uzZ7fe1CxPfJioNOA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-07 19:13                                 ` Tim.Bird-7U/KSKJipcs
2019-05-07 19:13                                   ` Tim.Bird
2019-05-07 19:13                                   ` Tim.Bird
2019-05-07 19:13                                   ` Tim.Bird
2019-05-07 19:13                                   ` Tim.Bird
2019-05-07 19:13                                   ` Tim.Bird
2019-05-03  6:41             ` Greg KH
2019-05-03  6:41               ` Greg KH
2019-05-03  6:41               ` Greg KH
2019-05-03  6:41               ` gregkh
2019-05-03  6:41               ` Greg KH
2019-05-01 23:01 ` [PATCH v2 13/17] kunit: defconfig: add defconfigs for building " Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-01 23:01   ` Brendan Higgins
     [not found] ` <20190501230126.229218-1-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-05-01 23:01   ` [PATCH v2 14/17] Documentation: kunit: add documentation for KUnit Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` brendanhiggins
2019-05-01 23:01     ` Brendan Higgins
     [not found]     ` <20190501230126.229218-15-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-05-09  5:08       ` Randy Dunlap
2019-05-09  5:08         ` Randy Dunlap
2019-05-09  5:08         ` Randy Dunlap
2019-05-09  5:08         ` rdunlap
2019-05-09  5:08         ` Randy Dunlap
2019-05-09 17:38         ` Brendan Higgins
2019-05-09 17:38           ` Brendan Higgins
2019-05-09 17:38           ` Brendan Higgins
2019-05-09 17:38           ` Brendan Higgins
2019-05-09 17:38           ` brendanhiggins
2019-05-09 17:38           ` Brendan Higgins
2019-05-01 23:01   ` [PATCH v2 15/17] MAINTAINERS: add entry for KUnit the unit testing framework Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` brendanhiggins
2019-05-01 23:01     ` Brendan Higgins
2019-05-03 14:38     ` shuah
2019-05-03 14:38       ` shuah
2019-05-03 14:38       ` shuah
2019-05-03 14:38       ` shuah
2019-05-03 14:38       ` shuah
2019-05-06  9:18       ` Brendan Higgins
2019-05-06  9:18         ` Brendan Higgins
2019-05-06  9:18         ` Brendan Higgins
2019-05-06  9:18         ` brendanhiggins
2019-05-06  9:18         ` Brendan Higgins
2019-05-01 23:01   ` [PATCH v2 16/17] kernel/sysctl-test: Add null pointer test for sysctl.c:proc_dointvec() Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` Brendan Higgins
2019-05-01 23:01     ` brendanhiggins
2019-05-01 23:01     ` Brendan Higgins
2019-05-02 11:03     ` Greg KH
2019-05-02 11:03       ` Greg KH
2019-05-02 11:03       ` Greg KH
2019-05-02 11:03       ` gregkh
2019-05-02 11:03       ` Greg KH
2019-05-02 18:14       ` Tim.Bird
2019-05-02 18:14         ` Tim.Bird
2019-05-02 18:14         ` Tim.Bird
2019-05-02 18:14         ` Tim.Bird
2019-05-02 18:14         ` Tim.Bird
2019-05-02 18:14         ` Tim.Bird
2019-05-02 18:45         ` Brendan Higgins
2019-05-02 18:45           ` Brendan Higgins
2019-05-02 18:45           ` Brendan Higgins
2019-05-02 18:45           ` brendanhiggins
2019-05-02 18:45           ` Brendan Higgins
2019-05-03  6:42           ` Greg KH
2019-05-03  6:42             ` Greg KH
2019-05-03  6:42             ` Greg KH
2019-05-03  6:42             ` gregkh
2019-05-03  6:42             ` Greg KH
2019-05-03 23:41             ` Brendan Higgins
2019-05-03 23:41               ` Brendan Higgins
2019-05-03 23:41               ` Brendan Higgins
2019-05-03 23:41               ` brendanhiggins
2019-05-03 23:41               ` Brendan Higgins
2019-05-04 10:40               ` Greg KH
2019-05-04 10:40                 ` Greg KH
2019-05-04 10:40                 ` Greg KH
2019-05-04 10:40                 ` gregkh
2019-05-04 10:40                 ` Greg KH
2019-05-01 23:01 ` [PATCH v2 17/17] MAINTAINERS: add proc sysctl KUnit test to PROC SYSCTL section Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` Brendan Higgins
2019-05-01 23:01   ` brendanhiggins
2019-05-02 10:50 ` [PATCH v2 00/17] kunit: introduce KUnit, the Linux kernel unit testing framework Greg KH
2019-05-02 10:50   ` Greg KH
2019-05-02 10:50   ` Greg KH
2019-05-02 10:50   ` gregkh
2019-05-02 10:50   ` Greg KH
2019-05-02 11:05   ` Greg KH
2019-05-02 11:05     ` Greg KH
2019-05-02 11:05     ` Greg KH
2019-05-02 11:05     ` gregkh
2019-05-02 11:05     ` Greg KH
2019-05-03  0:41     ` Brendan Higgins
2019-05-03  0:41       ` Brendan Higgins
2019-05-03  0:41       ` Brendan Higgins
2019-05-03  0:41       ` brendanhiggins
2019-05-03  0:41       ` Brendan Higgins
2019-05-02 14:04   ` shuah
2019-05-02 14:04     ` shuah
2019-05-02 14:04     ` shuah
2019-05-02 14:04     ` shuah
2019-05-02 14:04     ` shuah
2019-05-02 14:04     ` shuah
2019-05-03  0:44     ` Brendan Higgins
2019-05-03  0:44       ` Brendan Higgins
2019-05-03  0:44       ` Brendan Higgins
2019-05-03  0:44       ` brendanhiggins
2019-05-03  0:44       ` Brendan Higgins
2019-05-03  3:18 ` Logan Gunthorpe
2019-05-03  3:18   ` Logan Gunthorpe
2019-05-03  3:18   ` Logan Gunthorpe
2019-05-03  3:18   ` logang
2019-05-03  3:18   ` Logan Gunthorpe
2019-05-07  3:14 ` Frank Rowand
2019-05-07  3:14   ` Frank Rowand
2019-05-07  3:14   ` Frank Rowand
2019-05-07  3:14   ` frowand.list
     [not found]   ` <54940124-50df-16ec-1a32-ad794ee05da7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-07  8:01     ` Greg KH
2019-05-07  8:01       ` Greg KH
2019-05-07  8:01       ` gregkh
2019-05-07  8:01       ` Greg KH
2019-05-07 15:23       ` shuah
2019-05-07 15:23         ` shuah
2019-05-07 15:23         ` shuah
2019-05-07 15:23         ` shuah
2019-05-07 15:23         ` shuah
2019-05-07 15:23         ` shuah
2019-05-09  1:01         ` Frank Rowand
2019-05-09  1:01           ` Frank Rowand
2019-05-09  1:01           ` Frank Rowand
2019-05-09  1:01           ` frowand.list
2019-05-09  1:01           ` Frank Rowand
2019-05-09  1:01           ` Frank Rowand
2019-05-07 17:22       ` Theodore Ts'o
2019-05-07 17:22         ` Theodore Ts'o
2019-05-07 17:22         ` Theodore Ts'o
2019-05-07 17:22         ` tytso
2019-05-07 17:22         ` Theodore Ts'o
2019-05-07 17:22         ` Theodore Ts'o
2019-05-08 19:17         ` Brendan Higgins
2019-05-08 19:17           ` Brendan Higgins
2019-05-08 19:17           ` Brendan Higgins
2019-05-08 19:17           ` Brendan Higgins
2019-05-08 19:17           ` brendanhiggins
2019-05-08 19:17           ` Brendan Higgins
2019-05-09  0:58         ` Frank Rowand
2019-05-09  0:58           ` Frank Rowand
2019-05-09  0:58           ` Frank Rowand
2019-05-09  0:58           ` frowand.list
2019-05-09  0:58           ` Frank Rowand
2019-05-09  0:58           ` Frank Rowand
2019-05-09  1:44           ` Theodore Ts'o
2019-05-09  1:44             ` Theodore Ts'o
2019-05-09  1:44             ` Theodore Ts'o
2019-05-09  1:44             ` tytso
2019-05-09  1:44             ` Theodore Ts'o
2019-05-09  1:44             ` Theodore Ts'o
2019-05-09  2:18             ` Frank Rowand
2019-05-09  2:18               ` Frank Rowand
2019-05-09  2:18               ` Frank Rowand
2019-05-09  2:18               ` frowand.list
2019-05-09  2:18               ` Frank Rowand
2019-05-09  2:18               ` Frank Rowand
2019-05-14  8:22           ` Brendan Higgins
2019-05-14  8:22             ` Brendan Higgins
2019-05-14  8:22             ` brendanhiggins
2019-05-14  8:22             ` Brendan Higgins
2019-05-09  0:43       ` Frank Rowand
2019-05-09  0:43         ` Frank Rowand
2019-05-09  0:43         ` Frank Rowand
2019-05-09  0:43         ` frowand.list
2019-05-09  0:43         ` Frank Rowand
2019-05-09  0:43         ` Frank Rowand
2019-05-09  1:58         ` Theodore Ts'o
2019-05-09  1:58           ` Theodore Ts'o
2019-05-09  1:58           ` Theodore Ts'o
2019-05-09  1:58           ` tytso
2019-05-09  1:58           ` Theodore Ts'o
2019-05-09  1:58           ` Theodore Ts'o
2019-05-09  2:13           ` Frank Rowand
2019-05-09  2:13             ` Frank Rowand
2019-05-09  2:13             ` Frank Rowand
2019-05-09  2:13             ` frowand.list
2019-05-09  2:13             ` Frank Rowand
2019-05-09  2:13             ` Frank Rowand
2019-05-09  3:20             ` Theodore Ts'o
2019-05-09  3:20               ` Theodore Ts'o
2019-05-09  3:20               ` Theodore Ts'o
2019-05-09  3:20               ` tytso
2019-05-09  3:20               ` Theodore Ts'o
2019-05-09  3:20               ` Theodore Ts'o
     [not found]               ` <20190509032017.GA29703-3s7WtUTddSA@public.gmane.org>
2019-05-09 11:52                 ` Knut Omang
2019-05-09 11:52                   ` Knut Omang
2019-05-09 11:52                   ` Knut Omang
2019-05-09 11:52                   ` knut.omang
2019-05-09 11:52                   ` Knut Omang
2019-05-09 13:35                   ` Theodore Ts'o
2019-05-09 13:35                     ` Theodore Ts'o
2019-05-09 13:35                     ` Theodore Ts'o
2019-05-09 13:35                     ` tytso
2019-05-09 13:35                     ` Theodore Ts'o
2019-05-09 13:35                     ` Theodore Ts'o
     [not found]                     ` <20190509133551.GD29703-3s7WtUTddSA@public.gmane.org>
2019-05-09 14:48                       ` Knut Omang [this message]
2019-05-09 14:48                         ` Knut Omang
2019-05-09 14:48                         ` Knut Omang
2019-05-09 14:48                         ` knut.omang
2019-05-09 14:48                         ` Knut Omang
2019-05-09 17:00                       ` Tim.Bird-7U/KSKJipcs
2019-05-09 17:00                         ` Tim.Bird
2019-05-09 17:00                         ` Tim.Bird
2019-05-09 17:00                         ` Tim.Bird
2019-05-09 17:00                         ` Tim.Bird
2019-05-09 17:00                         ` Tim.Bird
2019-05-09 17:42                         ` Daniel Vetter
2019-05-09 17:42                           ` Daniel Vetter
2019-05-09 17:42                           ` Daniel Vetter
2019-05-09 17:42                           ` Daniel Vetter
2019-05-09 17:42                           ` daniel
2019-05-09 17:42                           ` Daniel Vetter
2019-05-09 18:12                         ` Frank Rowand
2019-05-09 18:12                           ` Frank Rowand
2019-05-09 18:12                           ` Frank Rowand
2019-05-09 18:12                           ` frowand.list
2019-05-09 18:12                           ` Frank Rowand
2019-05-09 18:12                           ` Frank Rowand
2019-05-09 21:42                           ` Theodore Ts'o
2019-05-09 21:42                             ` Theodore Ts'o
2019-05-09 21:42                             ` Theodore Ts'o
2019-05-09 21:42                             ` tytso
2019-05-09 21:42                             ` Theodore Ts'o
2019-05-09 21:42                             ` Theodore Ts'o
2019-05-09 22:20                             ` Logan Gunthorpe
2019-05-09 22:20                               ` Logan Gunthorpe
2019-05-09 22:20                               ` Logan Gunthorpe
2019-05-09 22:20                               ` logang
2019-05-09 22:20                               ` Logan Gunthorpe
2019-05-09 22:20                               ` Logan Gunthorpe
2019-05-09 23:30                               ` Theodore Ts'o
2019-05-09 23:30                                 ` Theodore Ts'o
2019-05-09 23:30                                 ` Theodore Ts'o
2019-05-09 23:30                                 ` tytso
2019-05-09 23:30                                 ` Theodore Ts'o
2019-05-09 23:30                                 ` Theodore Ts'o
2019-05-09 23:40                                 ` Logan Gunthorpe
2019-05-09 23:40                                   ` Logan Gunthorpe
2019-05-09 23:40                                   ` Logan Gunthorpe
2019-05-09 23:40                                   ` logang
2019-05-09 23:40                                   ` Logan Gunthorpe
2019-05-09 23:40                                   ` Logan Gunthorpe
2019-05-10  4:47                                   ` Theodore Ts'o
2019-05-10  4:47                                     ` Theodore Ts'o
2019-05-10  4:47                                     ` Theodore Ts'o
2019-05-10  4:47                                     ` tytso
2019-05-10  4:47                                     ` Theodore Ts'o
2019-05-10  4:47                                     ` Theodore Ts'o
2019-05-10  5:18                                   ` Frank Rowand
2019-05-10  5:18                                     ` Frank Rowand
2019-05-10  5:18                                     ` Frank Rowand
2019-05-10  5:18                                     ` frowand.list
2019-05-10  5:18                                     ` Frank Rowand
2019-05-10  5:18                                     ` Frank Rowand
     [not found]                                     ` <6d6e91ec-33d3-830b-4895-4d7a20ba7d45-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-10  5:48                                       ` Knut Omang
2019-05-10  5:48                                         ` Knut Omang
2019-05-10  5:48                                         ` Knut Omang
2019-05-10  5:48                                         ` knut.omang
2019-05-10  5:48                                         ` Knut Omang
2019-05-10  8:12                                         ` Daniel Vetter
2019-05-10  8:12                                           ` Daniel Vetter
2019-05-10  8:12                                           ` Daniel Vetter
2019-05-10  8:12                                           ` Daniel Vetter
2019-05-10  8:12                                           ` daniel
2019-05-10  8:12                                           ` Daniel Vetter
2019-05-10 10:23                                           ` Brendan Higgins
2019-05-10 10:23                                             ` Brendan Higgins
2019-05-10 10:23                                             ` Brendan Higgins
2019-05-10 10:23                                             ` brendanhiggins
2019-05-10 10:23                                             ` Brendan Higgins
     [not found]                                             ` <CAFd5g47Fvafwgh15JNfxSBRf5qqG2z+V+XGAB2cJtNnHFTiFfQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-10 12:12                                               ` Knut Omang
2019-05-10 12:12                                                 ` Knut Omang
2019-05-10 12:12                                                 ` Knut Omang
2019-05-10 12:12                                                 ` Knut Omang
2019-05-10 12:12                                                 ` knut.omang
2019-05-10 12:12                                                 ` Knut Omang
2019-05-10 20:54                                                 ` Brendan Higgins
2019-05-10 20:54                                                   ` Brendan Higgins
2019-05-10 20:54                                                   ` Brendan Higgins
2019-05-10 20:54                                                   ` Brendan Higgins
2019-05-10 20:54                                                   ` brendanhiggins
2019-05-10 20:54                                                   ` Brendan Higgins
2019-05-10 22:18                                                   ` Frank Rowand
2019-05-10 22:18                                                     ` Frank Rowand
2019-05-10 22:18                                                     ` Frank Rowand
2019-05-10 22:18                                                     ` Frank Rowand
2019-05-10 22:18                                                     ` frowand.list
2019-05-10 22:18                                                     ` Frank Rowand
     [not found]                                                     ` <ccec4818-1b9d-2554-e0e4-433eba659c8e-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-11  6:17                                                       ` Knut Omang
2019-05-11  6:17                                                         ` Knut Omang
2019-05-11  6:17                                                         ` Knut Omang
2019-05-11  6:17                                                         ` Knut Omang
2019-05-11  6:17                                                         ` knut.omang
2019-05-11  6:17                                                         ` Knut Omang
2019-05-14  6:39                                                         ` Brendan Higgins
2019-05-14  6:39                                                           ` Brendan Higgins
2019-05-14  6:39                                                           ` Brendan Higgins
2019-05-14  6:39                                                           ` Brendan Higgins
2019-05-14  6:39                                                           ` brendanhiggins
2019-05-14  6:39                                                           ` Brendan Higgins
2019-05-10 21:59                                             ` Frank Rowand
2019-05-10 21:59                                               ` Frank Rowand
2019-05-10 21:59                                               ` Frank Rowand
2019-05-10 21:59                                               ` Frank Rowand
2019-05-10 21:59                                               ` frowand.list
2019-05-10 21:59                                               ` Frank Rowand
     [not found]                                               ` <8abaf5f2-dd33-98d0-7b34-b57de7fe7c8b-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-05-11  6:43                                                 ` Knut Omang
2019-05-11  6:43                                                   ` Knut Omang
2019-05-11  6:43                                                   ` Knut Omang
2019-05-11  6:43                                                   ` Knut Omang
2019-05-11  6:43                                                   ` knut.omang
2019-05-11  6:43                                                   ` Knut Omang
     [not found]                                                   ` <a3362d96a6d95d852753739384ded814f5269aac.camel-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2019-05-14  8:00                                                     ` Brendan Higgins
2019-05-14  8:00                                                       ` Brendan Higgins
2019-05-14  8:00                                                       ` Brendan Higgins
2019-05-14  8:00                                                       ` Brendan Higgins
2019-05-14  8:00                                                       ` brendanhiggins
2019-05-14  8:00                                                       ` Brendan Higgins
     [not found]                                           ` <CAKMK7uFd1xUx8u3xWLwifVSq4OEnMO4S-m0hESe68UzONXnMFg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-10 11:36                                             ` Knut Omang
2019-05-10 11:36                                               ` Knut Omang
2019-05-10 11:36                                               ` Knut Omang
2019-05-10 11:36                                               ` Knut Omang
2019-05-10 11:36                                               ` knut.omang
2019-05-10 11:36                                               ` Knut Omang
2019-05-10 16:17                                     ` Logan Gunthorpe
2019-05-10 16:17                                       ` Logan Gunthorpe
2019-05-10 16:17                                       ` Logan Gunthorpe
2019-05-10 16:17                                       ` logang
2019-05-10 16:17                                       ` Logan Gunthorpe
2019-05-10 22:13                                       ` Frank Rowand
2019-05-10 22:13                                         ` Frank Rowand
2019-05-10 22:13                                         ` Frank Rowand
2019-05-10 22:13                                         ` frowand.list
2019-05-10 22:13                                         ` Frank Rowand
2019-05-10 22:13                                         ` Frank Rowand
2019-05-14  8:38                                         ` Brendan Higgins
2019-05-14  8:38                                           ` Brendan Higgins
2019-05-14  8:38                                           ` Brendan Higgins
2019-05-14  8:38                                           ` brendanhiggins
2019-05-14  8:38                                           ` Brendan Higgins
2019-05-15  0:14                                           ` Frank Rowand
2019-05-15  0:14                                             ` Frank Rowand
2019-05-15  0:14                                             ` Frank Rowand
2019-05-15  0:14                                             ` frowand.list
2019-05-15  0:14                                             ` Frank Rowand
2019-05-15  0:26                                             ` Logan Gunthorpe
2019-05-15  0:26                                               ` Logan Gunthorpe
2019-05-15  0:26                                               ` Logan Gunthorpe
2019-05-15  0:26                                               ` logang
2019-05-15  0:26                                               ` Logan Gunthorpe
2019-05-15  0:26                                               ` Logan Gunthorpe
2019-05-10 21:52                               ` Frank Rowand
2019-05-10 21:52                                 ` Frank Rowand
2019-05-10 21:52                                 ` Frank Rowand
2019-05-10 21:52                                 ` frowand.list
2019-05-10 21:52                                 ` Frank Rowand
2019-05-10 21:52                                 ` Frank Rowand
2019-05-14 20:54                                 ` Brendan Higgins
2019-05-14 20:54                                   ` Brendan Higgins
2019-05-14 20:54                                   ` Brendan Higgins
2019-05-14 20:54                                   ` brendanhiggins
2019-05-14 20:54                                   ` Brendan Higgins
2019-05-10 21:12                             ` Frank Rowand
2019-05-10 21:12                               ` Frank Rowand
2019-05-10 21:12                               ` Frank Rowand
2019-05-10 21:12                               ` frowand.list
2019-05-10 21:12                               ` Frank Rowand
2019-05-10 21:12                               ` Frank Rowand
2019-05-11 17:33                               ` Theodore Ts'o
2019-05-11 17:33                                 ` Theodore Ts'o
2019-05-11 17:33                                 ` Theodore Ts'o
2019-05-11 17:33                                 ` tytso
2019-05-11 17:33                                 ` Theodore Ts'o
2019-05-11 17:33                                 ` Theodore Ts'o
2019-05-13 14:44                                 ` Daniel Vetter
2019-05-13 14:44                                   ` Daniel Vetter
2019-05-13 14:44                                   ` Daniel Vetter
2019-05-13 14:44                                   ` daniel
2019-05-13 14:44                                   ` Daniel Vetter
2019-05-14  6:04                                   ` Brendan Higgins
2019-05-14  6:04                                     ` Brendan Higgins
2019-05-14  6:04                                     ` Brendan Higgins
2019-05-14  6:04                                     ` brendanhiggins
2019-05-14  6:04                                     ` Brendan Higgins
     [not found]                                     ` <20190514060433.GA181462-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-05-14 12:05                                       ` Daniel Vetter
2019-05-14 12:05                                         ` Daniel Vetter
2019-05-14 12:05                                         ` Daniel Vetter
2019-05-14 12:05                                         ` Daniel Vetter
2019-05-14 12:05                                         ` daniel
2019-05-14 12:05                                         ` Daniel Vetter
2019-05-14 18:36                                         ` Brendan Higgins
2019-05-14 18:36                                           ` Brendan Higgins
2019-05-14 18:36                                           ` Brendan Higgins
2019-05-14 18:36                                           ` Brendan Higgins
2019-05-14 18:36                                           ` brendanhiggins
2019-05-14 18:36                                           ` Brendan Higgins
2019-05-15  7:41                                           ` Daniel Vetter
2019-05-15  7:41                                             ` Daniel Vetter
2019-05-15  7:41                                             ` Daniel Vetter
2019-05-15  7:41                                             ` Daniel Vetter
2019-05-15  7:41                                             ` daniel
2019-05-15  7:41                                             ` Daniel Vetter
2019-05-15  7:41                                             ` Daniel Vetter
2019-05-22 21:38                                             ` Brendan Higgins
2019-05-22 21:38                                               ` Brendan Higgins
2019-05-22 21:38                                               ` Brendan Higgins
2019-05-22 21:38                                               ` Brendan Higgins
2019-05-22 21:38                                               ` brendanhiggins
2019-05-22 21:38                                               ` Brendan Higgins
2019-05-23  8:40                                               ` Daniel Vetter
2019-05-23  8:40                                                 ` Daniel Vetter
2019-05-23  8:40                                                 ` Daniel Vetter
2019-05-23  8:40                                                 ` Daniel Vetter
2019-05-23  8:40                                                 ` daniel
2019-05-23  8:40                                                 ` Daniel Vetter
2019-05-23  8:40                                                 ` Daniel Vetter
     [not found]                                             ` <20190515074141.GY17751-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2019-05-22 21:38                                               ` Brendan Higgins
2019-05-15  0:26                                 ` Frank Rowand
2019-05-15  0:26                                   ` Frank Rowand
2019-05-15  0:26                                   ` Frank Rowand
2019-05-15  0:26                                   ` frowand.list
2019-05-15  0:26                                   ` Frank Rowand
2019-05-15  4:28                                   ` Theodore Ts'o
2019-05-15  4:28                                     ` Theodore Ts'o
2019-05-15  4:28                                     ` Theodore Ts'o
2019-05-15  4:28                                     ` tytso
2019-05-15  4:28                                     ` Theodore Ts'o
2019-05-15  4:28                                     ` Theodore Ts'o
2019-05-10  5:11             ` Frank Rowand
2019-05-10  5:11               ` Frank Rowand
2019-05-10  5:11               ` Frank Rowand
2019-05-10  5:11               ` frowand.list
2019-05-10  5:11               ` Frank Rowand
2019-05-10  5:11               ` Frank Rowand
2019-05-10 10:43               ` Theodore Ts'o
2019-05-10 10:43                 ` Theodore Ts'o
2019-05-10 10:43                 ` Theodore Ts'o
2019-05-10 10:43                 ` tytso
2019-05-10 10:43                 ` Theodore Ts'o
2019-05-10 10:43                 ` Theodore Ts'o
2019-05-10 21:05                 ` Frank Rowand
2019-05-10 21:05                   ` Frank Rowand
2019-05-10 21:05                   ` Frank Rowand
2019-05-10 21:05                   ` frowand.list
2019-05-10 21:05                   ` Frank Rowand
2019-05-10 21:05                   ` Frank Rowand
2019-05-09 15:19 ` Masahiro Yamada
2019-05-09 15:19   ` Masahiro Yamada
2019-05-09 15:19   ` Masahiro Yamada
2019-05-09 15:19   ` Masahiro Yamada
2019-05-09 15:19   ` yamada.masahiro
2019-05-09 15:19   ` Masahiro Yamada
2019-05-10 10:25   ` Brendan Higgins
2019-05-10 10:25     ` Brendan Higgins
2019-05-10 10:25     ` Brendan Higgins
2019-05-10 10:25     ` Brendan Higgins
2019-05-10 10:25     ` brendanhiggins
2019-05-10 10:25     ` 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=3ce70d58c41be8c907c21ec7d3450b269ede8287.camel@oracle.com \
    --to=knut.omang-qhclzuegtsvqt0dzr+alfa@public.gmane.org \
    --cc=Alexander.Levin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org \
    --cc=Tim.Bird-7U/KSKJipcs@public.gmane.org \
    --cc=amir73il-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=dan.carpenter-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
    --cc=daniel-/w4YWyX8dFk@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=jdike-OPE4K8JWMJJBDgjK7y7TUQ@public.gmane.org \
    --cc=joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org \
    --cc=julia.lawall-L2FTfq7BK8M@public.gmane.org \
    --cc=keescook-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=kieran.bingham-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=kunit-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kbuild-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org \
    --cc=linux-um-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=mcgrof-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org \
    --cc=pmladek-IBi9RG/b67k@public.gmane.org \
    --cc=richard-/L3Ra7n9ekc@public.gmane.org \
    --cc=rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org \
    --cc=sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=tytso-3s7WtUTddSA@public.gmane.org \
    --cc=wfg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.