All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <sboyd@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>
Cc: Petr Mladek <pmladek@suse.com>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Amir Goldstein <amir73il@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Sasha Levin <Alexander.Levin@microsoft.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>, shuah <shuah@kernel.org>,
	Rob Herring <robh@kernel.org>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Knut Omang <knut.omang@oracle.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	wfg@linux.intel.com, Joel Stanley <joel@jms.id.au>,
	David Rientjes <rientjes@google.com>,
	Jeff Dike <jdike@addtoit.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	devicetree <devicetree@vger.kernel.org>,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	"Bird, Timothy  <Tim.Bird@sony.com>,
	linux-um@lists.infradead.org,
	Steven Rostedt" <rostedt@goodmis.org>,
	Julia Lawall <julia.lawall@lip6.fr>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	kunit-dev@googlegroups.com, Theodore Ts'o <tytso@mit.edu>,
	Richard Weinberger <richard@nod.at>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Daniel Vetter <daniel@ffwll.ch>, Kees Cook <keescook@google.com>,
	linux-fsdevel@vger.kernel.org,
	Kevin Hilman <khilman@baylibre.com>
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Thu, 27 Jun 2019 11:16:35 -0700	[thread overview]
Message-ID: <20190627181636.5EA752064A@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46zHAupdUh3wDuqPJti2M+_=oje_5weFe7AVLQfkDDM6A@mail.gmail.com>

Quoting Brendan Higgins (2019-06-26 16:00:40)
> On Tue, Jun 25, 2019 at 8:41 PM Stephen Boyd <sboyd@kernel.org> wrote:
> 
> > scenario like below, but where it is a problem. There could be three
> > CPUs, or even one CPU and three threads if you want to describe the
> > extra thread scenario.
> >
> > Here's my scenario where it isn't needed:
> >
> >     CPU0                                      CPU1
> >     ----                                      ----
> >     kunit_run_test(&test)
> >                                               test_case_func()
> >                                                 ....
> >                                               [mock hardirq]
> >                                                 kunit_set_success(&test)
> >                                               [hardirq ends]
> >                                                 ...
> >                                                 complete(&test_done)
> >       wait_for_completion(&test_done)
> >       kunit_get_success(&test)
> >
> > We don't need to care about having locking here because success or
> > failure only happens in one place and it's synchronized with the
> > completion.
> 
> Here is the scenario I am concerned about:
> 
> CPU0                      CPU1                       CPU2
> ----                      ----                       ----
> kunit_run_test(&test)
>                           test_case_func()
>                             ....
>                             schedule_work(foo_func)
>                           [mock hardirq]             foo_func()
>                             ...                        ...
>                             kunit_set_success(false)   kunit_set_success(false)
>                           [hardirq ends]               ...
>                             ...
>                             complete(&test_done)
>   wait_for_completion(...)
>   kunit_get_success(&test)
> 
> In my scenario, since both CPU1 and CPU2 update the success status of
> the test simultaneously, even though they are setting it to the same
> value. If my understanding is correct, this could result in a
> write-tear on some architectures in some circumstances. I suppose we
> could just make it an atomic boolean, but I figured locking is also
> fine, and generally preferred.

This is what we have WRITE_ONCE() and READ_ONCE() for. Maybe you could
just use that in the getter and setters and remove the lock if it isn't
used for anything else.

It may also be a good idea to have a kunit_fail_test() API that fails
the test passed in with a WRITE_ONCE(false). Otherwise, the test is
assumed successful and it isn't even possible for a test to change the
state from failure to success due to a logical error because the API
isn't available. Then we don't really need to have a generic
kunit_set_success() function at all. We could have a kunit_test_failed()
function too that replaces the kunit_get_success() function. That would
read better in an if condition.

> 
> Also, to be clear, I am onboard with dropping then IRQ stuff for now.
> I am fine moving to a mutex for the time being.
> 

Ok.

_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>
Cc: Frank Rowand <frowand.list@gmail.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Kees Cook <keescook@google.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Rob Herring <robh@kernel.org>, shuah <shuah@kernel.org>,
	Theodore Ts'o <tytso@mit.edu>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	devicetree <devicetree@vger.kernel.org>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	kunit-dev@googlegroups.com,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	linux-um@lists.infradead.org,
	Sasha Levin <Alexander.Levin@microsoft.com>,
	"Bird, Timothy" <Tim.Bird@sony.com>,
	Amir Goldstein <amir73il@gmail.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Daniel Vetter <daniel@ffwll.ch>, Jeff Dike <jdike@addtoit.com>,
	Joel Stanley <joel@jms.id.au>,
	Julia Lawall <julia.lawall@lip6.fr>,
	Kevin Hilman <khilman@baylibre.com>,
	Knut Omang <knut.omang@oracle.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Petr Mladek <pmladek@suse.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Richard Weinberger <richard@nod.at>,
	David Rientjes <rientjes@google.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	wfg@linux.intel.com
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Thu, 27 Jun 2019 11:16:35 -0700	[thread overview]
Message-ID: <20190627181636.5EA752064A@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46zHAupdUh3wDuqPJti2M+_=oje_5weFe7AVLQfkDDM6A@mail.gmail.com>

Quoting Brendan Higgins (2019-06-26 16:00:40)
> On Tue, Jun 25, 2019 at 8:41 PM Stephen Boyd <sboyd@kernel.org> wrote:
> 
> > scenario like below, but where it is a problem. There could be three
> > CPUs, or even one CPU and three threads if you want to describe the
> > extra thread scenario.
> >
> > Here's my scenario where it isn't needed:
> >
> >     CPU0                                      CPU1
> >     ----                                      ----
> >     kunit_run_test(&test)
> >                                               test_case_func()
> >                                                 ....
> >                                               [mock hardirq]
> >                                                 kunit_set_success(&test)
> >                                               [hardirq ends]
> >                                                 ...
> >                                                 complete(&test_done)
> >       wait_for_completion(&test_done)
> >       kunit_get_success(&test)
> >
> > We don't need to care about having locking here because success or
> > failure only happens in one place and it's synchronized with the
> > completion.
> 
> Here is the scenario I am concerned about:
> 
> CPU0                      CPU1                       CPU2
> ----                      ----                       ----
> kunit_run_test(&test)
>                           test_case_func()
>                             ....
>                             schedule_work(foo_func)
>                           [mock hardirq]             foo_func()
>                             ...                        ...
>                             kunit_set_success(false)   kunit_set_success(false)
>                           [hardirq ends]               ...
>                             ...
>                             complete(&test_done)
>   wait_for_completion(...)
>   kunit_get_success(&test)
> 
> In my scenario, since both CPU1 and CPU2 update the success status of
> the test simultaneously, even though they are setting it to the same
> value. If my understanding is correct, this could result in a
> write-tear on some architectures in some circumstances. I suppose we
> could just make it an atomic boolean, but I figured locking is also
> fine, and generally preferred.

This is what we have WRITE_ONCE() and READ_ONCE() for. Maybe you could
just use that in the getter and setters and remove the lock if it isn't
used for anything else.

It may also be a good idea to have a kunit_fail_test() API that fails
the test passed in with a WRITE_ONCE(false). Otherwise, the test is
assumed successful and it isn't even possible for a test to change the
state from failure to success due to a logical error because the API
isn't available. Then we don't really need to have a generic
kunit_set_success() function at all. We could have a kunit_test_failed()
function too that replaces the kunit_get_success() function. That would
read better in an if condition.

> 
> Also, to be clear, I am onboard with dropping then IRQ stuff for now.
> I am fine moving to a mutex for the time being.
> 

Ok.


WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Brendan Higgins <brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: Petr Mladek <pmladek-IBi9RG/b67k@public.gmane.org>,
	"open list:DOCUMENTATION"
	<linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
	Amir Goldstein <amir73il-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	dri-devel
	<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Sasha Levin
	<Alexander.Levin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org>,
	Masahiro Yamada
	<yamada.masahiro-uWyLwvC0a2jby3iVrkZq2A@public.gmane.org>,
	Michael Ellerman <mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	shuah <shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-nvdimm
	<linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org>,
	Frank Rowand
	<frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Knut Omang <knut.omang-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>,
	Kieran Bingham
	<kieran.bingham-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
	wfg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org,
	Joel Stanley <joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org>,
	David Rientjes <rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Jeff Dike <jdike-OPE4K8JWMJJBDgjK7y7TUQ@public.gmane.org>,
	Dan Carpenter
	<dan.carpenter-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>,
	devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-kbuild
	<linux-kbuild-u79uwXL29TasMV2rI37PzA@public.gmane.org>
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Thu, 27 Jun 2019 11:16:35 -0700	[thread overview]
Message-ID: <20190627181636.5EA752064A@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46zHAupdUh3wDuqPJti2M+_=oje_5weFe7AVLQfkDDM6A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

Quoting Brendan Higgins (2019-06-26 16:00:40)
> On Tue, Jun 25, 2019 at 8:41 PM Stephen Boyd <sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote:
> 
> > scenario like below, but where it is a problem. There could be three
> > CPUs, or even one CPU and three threads if you want to describe the
> > extra thread scenario.
> >
> > Here's my scenario where it isn't needed:
> >
> >     CPU0                                      CPU1
> >     ----                                      ----
> >     kunit_run_test(&test)
> >                                               test_case_func()
> >                                                 ....
> >                                               [mock hardirq]
> >                                                 kunit_set_success(&test)
> >                                               [hardirq ends]
> >                                                 ...
> >                                                 complete(&test_done)
> >       wait_for_completion(&test_done)
> >       kunit_get_success(&test)
> >
> > We don't need to care about having locking here because success or
> > failure only happens in one place and it's synchronized with the
> > completion.
> 
> Here is the scenario I am concerned about:
> 
> CPU0                      CPU1                       CPU2
> ----                      ----                       ----
> kunit_run_test(&test)
>                           test_case_func()
>                             ....
>                             schedule_work(foo_func)
>                           [mock hardirq]             foo_func()
>                             ...                        ...
>                             kunit_set_success(false)   kunit_set_success(false)
>                           [hardirq ends]               ...
>                             ...
>                             complete(&test_done)
>   wait_for_completion(...)
>   kunit_get_success(&test)
> 
> In my scenario, since both CPU1 and CPU2 update the success status of
> the test simultaneously, even though they are setting it to the same
> value. If my understanding is correct, this could result in a
> write-tear on some architectures in some circumstances. I suppose we
> could just make it an atomic boolean, but I figured locking is also
> fine, and generally preferred.

This is what we have WRITE_ONCE() and READ_ONCE() for. Maybe you could
just use that in the getter and setters and remove the lock if it isn't
used for anything else.

It may also be a good idea to have a kunit_fail_test() API that fails
the test passed in with a WRITE_ONCE(false). Otherwise, the test is
assumed successful and it isn't even possible for a test to change the
state from failure to success due to a logical error because the API
isn't available. Then we don't really need to have a generic
kunit_set_success() function at all. We could have a kunit_test_failed()
function too that replaces the kunit_get_success() function. That would
read better in an if condition.

> 
> Also, to be clear, I am onboard with dropping then IRQ stuff for now.
> I am fine moving to a mutex for the time being.
> 

Ok.

WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>
Cc: Frank Rowand <frowand.list@gmail.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Kees Cook <keescook@google.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Rob Herring <robh@kernel.org>, shuah <shuah@kernel.org>,
	Theodore Ts'o <tytso@mit.edu>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	devicetree <devicetree@vger.kernel.org>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	kunit-dev@googlegroups.com,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	linux-um@lists.infradead.org,
	Sasha Levin <Alexander.Levin@microsoft.com>,
	"Bird, Timothy" <Tim.Bird@sony.com>,
	Amir Goldstein <amir73il@gmail.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Daniel Vetter <daniel@ffwll.ch>, Jeff Dike <jdike@addtoit.com>,
	Joel Stanley <joel@jms.id.au>,
	Julia Lawall <julia.lawall@lip6.fr>,
	Kevin Hilman <khilman@baylibre.com>,
	Knut Omang <knut.omang@oracle.com>,
	Logan Gunthorpe <logang@deltatee.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Petr Mladek <pmladek@suse.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	Richard Weinberger <richard@nod.at>,
	David Rientjes <rientjes@google.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	wfg@linux.intel.com
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Thu, 27 Jun 2019 11:16:35 -0700	[thread overview]
Message-ID: <20190627181636.5EA752064A@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46zHAupdUh3wDuqPJti2M+_=oje_5weFe7AVLQfkDDM6A@mail.gmail.com>

Quoting Brendan Higgins (2019-06-26 16:00:40)
> On Tue, Jun 25, 2019 at 8:41 PM Stephen Boyd <sboyd@kernel.org> wrote:
> 
> > scenario like below, but where it is a problem. There could be three
> > CPUs, or even one CPU and three threads if you want to describe the
> > extra thread scenario.
> >
> > Here's my scenario where it isn't needed:
> >
> >     CPU0                                      CPU1
> >     ----                                      ----
> >     kunit_run_test(&test)
> >                                               test_case_func()
> >                                                 ....
> >                                               [mock hardirq]
> >                                                 kunit_set_success(&test)
> >                                               [hardirq ends]
> >                                                 ...
> >                                                 complete(&test_done)
> >       wait_for_completion(&test_done)
> >       kunit_get_success(&test)
> >
> > We don't need to care about having locking here because success or
> > failure only happens in one place and it's synchronized with the
> > completion.
> 
> Here is the scenario I am concerned about:
> 
> CPU0                      CPU1                       CPU2
> ----                      ----                       ----
> kunit_run_test(&test)
>                           test_case_func()
>                             ....
>                             schedule_work(foo_func)
>                           [mock hardirq]             foo_func()
>                             ...                        ...
>                             kunit_set_success(false)   kunit_set_success(false)
>                           [hardirq ends]               ...
>                             ...
>                             complete(&test_done)
>   wait_for_completion(...)
>   kunit_get_success(&test)
> 
> In my scenario, since both CPU1 and CPU2 update the success status of
> the test simultaneously, even though they are setting it to the same
> value. If my understanding is correct, this could result in a
> write-tear on some architectures in some circumstances. I suppose we
> could just make it an atomic boolean, but I figured locking is also
> fine, and generally preferred.

This is what we have WRITE_ONCE() and READ_ONCE() for. Maybe you could
just use that in the getter and setters and remove the lock if it isn't
used for anything else.

It may also be a good idea to have a kunit_fail_test() API that fails
the test passed in with a WRITE_ONCE(false). Otherwise, the test is
assumed successful and it isn't even possible for a test to change the
state from failure to success due to a logical error because the API
isn't available. Then we don't really need to have a generic
kunit_set_success() function at all. We could have a kunit_test_failed()
function too that replaces the kunit_get_success() function. That would
read better in an if condition.

> 
> Also, to be clear, I am onboard with dropping then IRQ stuff for now.
> I am fine moving to a mutex for the time being.
> 

Ok.

WARNING: multiple messages have this Message-ID (diff)
From: Stephen Boyd <sboyd@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>
Cc: Petr Mladek <pmladek@suse.com>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Amir Goldstein <amir73il@gmail.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Sasha Levin <Alexander.Levin@microsoft.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	"open list:KERNEL SELFTEST FRAMEWORK"
	<linux-kselftest@vger.kernel.org>, shuah <shuah@kernel.org>,
	Rob Herring <robh@kernel.org>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Knut Omang <knut.omang@oracle.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	wfg@linux.intel.com, Joel Stanley <joel@jms.id.au>,
	David Rientjes <rientjes@google.com>,
	Jeff Dike <jdike@addtoit.com>,
	Dan Carpenter <dan.carpenter@oracle.com>,
	devicetree <devicetree@vger.kernel.org>,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	"Bird, Timothy  <Tim.Bird@sony.com>,
	linux-um@lists.infradead.org,
	Steven Rostedt" <rostedt@goodmis.org>,
	Julia Lawall <julia.lawall@lip6.fr>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	kunit-dev@googlegroups.com, Theodore Ts'o <tytso@mit.edu>,
	Richard Weinberger <richard@nod.at>,
	Greg KH <gregkh@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Daniel Vetter <daniel@ffwll.ch>, Kees Cook <keescook@google.com>,
	linux-fsdevel@vger.kernel.org,
	Logan Gunthorpe <logang@deltatee.com>,
	Kevin Hilman <khilman@baylibre.com>
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Thu, 27 Jun 2019 11:16:35 -0700	[thread overview]
Message-ID: <20190627181636.5EA752064A@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46zHAupdUh3wDuqPJti2M+_=oje_5weFe7AVLQfkDDM6A@mail.gmail.com>

Quoting Brendan Higgins (2019-06-26 16:00:40)
> On Tue, Jun 25, 2019 at 8:41 PM Stephen Boyd <sboyd@kernel.org> wrote:
> 
> > scenario like below, but where it is a problem. There could be three
> > CPUs, or even one CPU and three threads if you want to describe the
> > extra thread scenario.
> >
> > Here's my scenario where it isn't needed:
> >
> >     CPU0                                      CPU1
> >     ----                                      ----
> >     kunit_run_test(&test)
> >                                               test_case_func()
> >                                                 ....
> >                                               [mock hardirq]
> >                                                 kunit_set_success(&test)
> >                                               [hardirq ends]
> >                                                 ...
> >                                                 complete(&test_done)
> >       wait_for_completion(&test_done)
> >       kunit_get_success(&test)
> >
> > We don't need to care about having locking here because success or
> > failure only happens in one place and it's synchronized with the
> > completion.
> 
> Here is the scenario I am concerned about:
> 
> CPU0                      CPU1                       CPU2
> ----                      ----                       ----
> kunit_run_test(&test)
>                           test_case_func()
>                             ....
>                             schedule_work(foo_func)
>                           [mock hardirq]             foo_func()
>                             ...                        ...
>                             kunit_set_success(false)   kunit_set_success(false)
>                           [hardirq ends]               ...
>                             ...
>                             complete(&test_done)
>   wait_for_completion(...)
>   kunit_get_success(&test)
> 
> In my scenario, since both CPU1 and CPU2 update the success status of
> the test simultaneously, even though they are setting it to the same
> value. If my understanding is correct, this could result in a
> write-tear on some architectures in some circumstances. I suppose we
> could just make it an atomic boolean, but I figured locking is also
> fine, and generally preferred.

This is what we have WRITE_ONCE() and READ_ONCE() for. Maybe you could
just use that in the getter and setters and remove the lock if it isn't
used for anything else.

It may also be a good idea to have a kunit_fail_test() API that fails
the test passed in with a WRITE_ONCE(false). Otherwise, the test is
assumed successful and it isn't even possible for a test to change the
state from failure to success due to a logical error because the API
isn't available. Then we don't really need to have a generic
kunit_set_success() function at all. We could have a kunit_test_failed()
function too that replaces the kunit_get_success() function. That would
read better in an if condition.

> 
> Also, to be clear, I am onboard with dropping then IRQ stuff for now.
> I am fine moving to a mutex for the time being.
> 

Ok.


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


  reply	other threads:[~2019-06-27 18:16 UTC|newest]

Thread overview: 215+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-17  8:25 [PATCH v5 00/18] kunit: introduce KUnit, the Linux kernel unit testing framework Brendan Higgins
2019-06-17  8:25 ` Brendan Higgins
2019-06-17  8:25 ` Brendan Higgins
2019-06-17  8:25 ` [PATCH v5 01/18] kunit: test: add KUnit test runner core Brendan Higgins
2019-06-17  8:25   ` Brendan Higgins
2019-06-20  0:15   ` Stephen Boyd
2019-06-20  0:15     ` Stephen Boyd
2019-06-20  0:15     ` Stephen Boyd
2019-06-20  0:15     ` Stephen Boyd
     [not found]     ` <20190620001526.93426218BE-+nuXSHJNwjE76Z2rM5mHXA@public.gmane.org>
2019-06-25 20:28       ` Brendan Higgins
2019-06-25 20:28         ` Brendan Higgins
2019-06-25 20:28         ` Brendan Higgins
2019-06-25 20:28         ` Brendan Higgins
2019-06-25 21:44         ` Luis Chamberlain
2019-06-25 21:44           ` Luis Chamberlain
2019-06-25 21:44           ` Luis Chamberlain
2019-06-25 21:44           ` Luis Chamberlain
2019-06-25 21:44           ` Luis Chamberlain
     [not found]           ` <20190625214427.GN19023-24ieFPqdLRAUX4Zk0b6cZUEOCMrvLtNR@public.gmane.org>
2019-06-25 22:14             ` Brendan Higgins
2019-06-25 22:14               ` Brendan Higgins
2019-06-25 22:14               ` Brendan Higgins
2019-06-25 23:02               ` Luis Chamberlain
2019-06-25 23:02                 ` Luis Chamberlain
2019-06-25 23:02                 ` Luis Chamberlain
2019-06-25 23:02                 ` Luis Chamberlain
2019-06-25 23:02                 ` Luis Chamberlain
2019-06-26  6:41                 ` Brendan Higgins
2019-06-26  6:41                   ` Brendan Higgins
2019-06-26  6:41                   ` Brendan Higgins
2019-06-26  6:41                   ` Brendan Higgins
2019-06-26 22:02                   ` Luis Chamberlain
2019-06-26 22:02                     ` Luis Chamberlain
2019-06-26 22:02                     ` Luis Chamberlain
2019-06-26 22:02                     ` Luis Chamberlain
2019-06-26 22:02                     ` Luis Chamberlain
     [not found]                     ` <20190626220204.GZ19023-24ieFPqdLRAUX4Zk0b6cZUEOCMrvLtNR@public.gmane.org>
2019-06-27  0:05                       ` Brendan Higgins
2019-06-27  0:05                         ` Brendan Higgins
2019-06-27  0:05                         ` Brendan Higgins
2019-06-26  3:40         ` Stephen Boyd
2019-06-26  3:40           ` Stephen Boyd
2019-06-26  3:40           ` Stephen Boyd
2019-06-26  3:40           ` Stephen Boyd
2019-06-26  3:40           ` Stephen Boyd
2019-06-26 23:00           ` Brendan Higgins
2019-06-26 23:00             ` Brendan Higgins
2019-06-26 23:00             ` Brendan Higgins
2019-06-27 18:16             ` Stephen Boyd [this message]
2019-06-27 18:16               ` Stephen Boyd
2019-06-27 18:16               ` Stephen Boyd
2019-06-27 18:16               ` Stephen Boyd
2019-06-27 18:16               ` Stephen Boyd
2019-06-28  8:09               ` Brendan Higgins
2019-06-28  8:09                 ` Brendan Higgins
2019-06-28  8:09                 ` Brendan Higgins
2019-06-28  8:09                 ` Brendan Higgins
2019-06-25 22:33   ` Luis Chamberlain
2019-06-25 22:33     ` Luis Chamberlain
2019-06-26  0:07     ` Brendan Higgins
2019-06-26  0:07       ` Brendan Higgins
2019-06-26  0:07       ` Brendan Higgins
2019-06-26  0:07       ` Brendan Higgins
2019-06-26  3:36       ` Luis Chamberlain
2019-06-26  3:36         ` Luis Chamberlain
2019-06-26  3:36         ` Luis Chamberlain
2019-06-26  3:36         ` Luis Chamberlain
2019-06-26  3:36         ` Luis Chamberlain
2019-06-26 22:16         ` Brendan Higgins
2019-06-26 22:16           ` Brendan Higgins
2019-06-26 22:16           ` Brendan Higgins
2019-06-17  8:25 ` [PATCH v5 02/18] kunit: test: add test resource management API Brendan Higgins
2019-06-17  8:25   ` Brendan Higgins
2019-06-17  8:25   ` Brendan Higgins
2019-06-17  8:25 ` [PATCH v5 04/18] kunit: test: add kunit_stream a std::stream like logger Brendan Higgins
2019-06-17  8:25   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 05/18] kunit: test: add the concept of expectations Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 07/18] kunit: test: add initial tests Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-25 23:22   ` Luis Chamberlain
2019-06-25 23:22     ` Luis Chamberlain
2019-06-25 23:22     ` Luis Chamberlain
2019-06-25 23:22     ` Luis Chamberlain
2019-06-26  7:53     ` Brendan Higgins
2019-06-26  7:53       ` Brendan Higgins
2019-06-26  7:53       ` Brendan Higgins
2019-06-26  7:53       ` Brendan Higgins
2019-07-02 17:52       ` Brendan Higgins
2019-07-02 17:52         ` Brendan Higgins
2019-07-02 17:52         ` Brendan Higgins
2019-07-02 20:57         ` Luis Chamberlain
2019-07-02 20:57           ` Luis Chamberlain
2019-07-02 20:57           ` Luis Chamberlain
2019-07-02 20:57           ` Luis Chamberlain
2019-07-02 20:57           ` Luis Chamberlain
2019-06-17  8:26 ` [PATCH v5 08/18] objtool: add kunit_try_catch_throw to the noreturn list Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 10/18] kunit: test: add tests for kunit test abort Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 12/18] kunit: test: add tests for KUnit managed resources Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 14/18] kunit: defconfig: add defconfigs for building KUnit tests Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26 ` [PATCH v5 16/18] MAINTAINERS: add entry for KUnit the unit testing framework Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
     [not found] ` <20190617082613.109131-1-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2019-06-17  8:25   ` [PATCH v5 03/18] kunit: test: add string_stream a std::stream like string builder Brendan Higgins
2019-06-17  8:25     ` Brendan Higgins
2019-06-17  8:25     ` Brendan Higgins
2019-06-17  8:26   ` [PATCH v5 06/18] kbuild: enable building KUnit Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-25 22:13     ` Luis Chamberlain
2019-06-25 22:13       ` Luis Chamberlain
2019-06-25 22:13       ` Luis Chamberlain
2019-06-25 22:13       ` Luis Chamberlain
2019-06-25 22:41       ` Brendan Higgins
2019-06-25 22:41         ` Brendan Higgins
2019-06-25 22:41         ` Brendan Higgins
2019-06-25 22:41         ` Brendan Higgins
2019-06-25 23:03         ` Luis Chamberlain
2019-06-25 23:03           ` Luis Chamberlain
2019-06-25 23:03           ` Luis Chamberlain
2019-06-25 23:03           ` Luis Chamberlain
2019-06-25 23:03           ` Luis Chamberlain
2019-06-17  8:26   ` [PATCH v5 09/18] kunit: test: add support for test abort Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26   ` [PATCH v5 11/18] kunit: test: add the concept of assertions Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26   ` [PATCH v5 13/18] kunit: tool: add Python wrappers for running KUnit tests Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-26  0:01     ` Luis Chamberlain
2019-06-26  0:01       ` Luis Chamberlain
2019-06-26  0:01       ` Luis Chamberlain
2019-06-26  0:01       ` Luis Chamberlain
     [not found]       ` <20190626000150.GT19023-24ieFPqdLRAUX4Zk0b6cZUEOCMrvLtNR@public.gmane.org>
2019-06-26  8:02         ` Brendan Higgins
2019-06-26  8:02           ` Brendan Higgins
2019-06-26  8:02           ` Brendan Higgins
2019-06-26  8:02           ` Brendan Higgins
2019-06-26 22:03           ` Luis Chamberlain
2019-06-26 22:03             ` Luis Chamberlain
2019-06-26 22:03             ` Luis Chamberlain
2019-06-26 22:03             ` Luis Chamberlain
2019-06-26 22:03             ` Luis Chamberlain
2019-06-27  0:23             ` Brendan Higgins
2019-06-27  0:23               ` Brendan Higgins
2019-06-27  0:23               ` Brendan Higgins
2019-06-17  8:26   ` [PATCH v5 15/18] Documentation: kunit: add documentation for KUnit Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26   ` [PATCH v5 17/18] kernel/sysctl-test: Add null pointer test for sysctl.c:proc_dointvec() Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-17  8:26     ` Brendan Higgins
2019-06-26  2:17     ` Luis Chamberlain
2019-06-26  2:17       ` Luis Chamberlain
2019-06-26  2:17       ` Luis Chamberlain
2019-06-26  2:17       ` Luis Chamberlain
2019-06-27  4:07       ` Iurii Zaikin
2019-06-27  4:07         ` Iurii Zaikin
2019-06-27  6:10         ` Luis Chamberlain
2019-06-27  6:10           ` Luis Chamberlain
2019-06-27  6:10           ` Luis Chamberlain
2019-06-27  6:10           ` Luis Chamberlain
     [not found]           ` <20190627061021.GE19023-24ieFPqdLRAUX4Zk0b6cZUEOCMrvLtNR@public.gmane.org>
2019-06-28  8:01             ` Brendan Higgins
2019-06-28  8:01               ` Brendan Higgins
2019-06-28  8:01               ` Brendan Higgins
2019-06-28  8:01               ` Brendan Higgins
2019-06-28 21:37               ` Luis Chamberlain
2019-06-28 21:37                 ` Luis Chamberlain
2019-06-28 21:37                 ` Luis Chamberlain
2019-06-28 21:37                 ` Luis Chamberlain
2019-06-28 21:37                 ` Luis Chamberlain
2019-06-17  8:26 ` [PATCH v5 18/18] MAINTAINERS: add proc sysctl KUnit test to PROC SYSCTL section Brendan Higgins
2019-06-17  8:26   ` Brendan Higgins
2019-06-26  2:19   ` Luis Chamberlain
2019-06-26  2:19     ` Luis Chamberlain
2019-06-26  2:19     ` Luis Chamberlain
2019-06-26  2:19     ` Luis Chamberlain
2019-06-20  1:17 ` [PATCH v5 00/18] kunit: introduce KUnit, the Linux kernel unit testing framework Frank Rowand
2019-06-20  1:17   ` Frank Rowand
2019-06-21 14:59   ` shuah
2019-06-21 14:59     ` shuah
2019-06-21 14:59     ` shuah
2019-06-21 14:59     ` shuah
2019-06-21 18:13     ` Theodore Ts'o
2019-06-21 18:13       ` Theodore Ts'o
2019-06-21 18:13       ` Theodore Ts'o
2019-06-21 18:13       ` Theodore Ts'o
2019-06-21 19:20       ` shuah
2019-06-21 19:20         ` shuah
2019-06-21 19:20         ` shuah
2019-06-21 19:20         ` shuah
     [not found]         ` <6f3f5184-d14e-1b46-17f1-391ee67e699c-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2019-06-22  0:54           ` Brendan Higgins
2019-06-22  0:54             ` Brendan Higgins
2019-06-22  0:54             ` Brendan Higgins
2019-06-22  0:54             ` Brendan Higgins
     [not found]             ` <CAFd5g46W1u+6JKLW0WX9uicK5utvJe9tvq4YBsCkghuo0rCmng-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-03 23:40               ` Brendan Higgins
2019-07-03 23:40                 ` Brendan Higgins
2019-07-03 23:40                 ` Brendan Higgins
2019-07-03 23:40                 ` Brendan Higgins
2019-06-21 23:35   ` Brendan Higgins
2019-06-21 23:35     ` Brendan Higgins
2019-06-21 23:35     ` Brendan Higgins
2019-06-21 23:35     ` Brendan Higgins
2019-06-26  2:38   ` Luis Chamberlain
2019-06-26  2:38     ` Luis Chamberlain
2019-06-26  2:38     ` Luis Chamberlain
2019-06-26  2:38     ` Luis Chamberlain

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=20190627181636.5EA752064A@mail.kernel.org \
    --to=sboyd@kernel.org \
    --cc=Alexander.Levin@microsoft.com \
    --cc=amir73il@gmail.com \
    --cc=brendanhiggins@google.com \
    --cc=dan.carpenter@oracle.com \
    --cc=daniel@ffwll.ch \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=frowand.list@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jdike@addtoit.com \
    --cc=joel@jms.id.au \
    --cc=jpoimboe@redhat.com \
    --cc=julia.lawall@lip6.fr \
    --cc=keescook@google.com \
    --cc=khilman@baylibre.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=knut.omang@oracle.com \
    --cc=kunit-dev@googlegroups.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mcgrof@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=rdunlap@infradead.org \
    --cc=richard@nod.at \
    --cc=rientjes@google.com \
    --cc=robh@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=shuah@kernel.org \
    --cc=tytso@mit.edu \
    --cc=wfg@linux.intel.com \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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.