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: Tue, 25 Jun 2019 20:40:59 -0700 [thread overview]
Message-ID: <20190626034100.B238520883@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46Jhxsz6_VXHEVYvTeDRwwzgKpr=aUWLL5b3S4kUukb8g@mail.gmail.com>
Quoting Brendan Higgins (2019-06-25 13:28:25)
> On Wed, Jun 19, 2019 at 5:15 PM Stephen Boyd <sboyd@kernel.org> wrote:
> >
> > Quoting Brendan Higgins (2019-06-17 01:25:56)
> > > diff --git a/kunit/test.c b/kunit/test.c
> > > new file mode 100644
> > > index 0000000000000..d05d254f1521f
> > > --- /dev/null
> > > +++ b/kunit/test.c
> > > @@ -0,0 +1,210 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Base unit test (KUnit) API.
> > > + *
> > > + * Copyright (C) 2019, Google LLC.
> > > + * Author: Brendan Higgins <brendanhiggins@google.com>
> > > + */
> > > +
> > > +#include <linux/sched/debug.h>
> > > +#include <kunit/test.h>
> > > +
> > > +static bool kunit_get_success(struct kunit *test)
> > > +{
> > > + unsigned long flags;
> > > + bool success;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + success = test->success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> >
> > I still don't understand the locking scheme in this code. Is the
> > intention to make getter and setter APIs that are "safe" by adding in a
> > spinlock that is held around getting and setting various members in the
> > kunit structure?
>
> Yes, your understanding is correct. It is possible for a user to write
> a test such that certain elements may be updated in different threads;
> this would most likely happen in the case where someone wants to make
> an assertion or an expectation in a thread created by a piece of code
> under test. Although this should generally be avoided, it is possible,
> and there are occasionally good reasons to do so, so it is
> functionality that we should support.
>
> Do you think I should add a comment to this effect?
No, I think the locking should be removed.
>
> > In what situation is there more than one thread reading or writing the
> > kunit struct? Isn't it only a single process that is going to be
>
> As I said above, it is possible that the code under test may spawn a
> new thread that may make an expectation or an assertion. It is not a
> super common use case, but it is possible.
Sure, sounds super possible and OK.
>
> > operating on this structure? And why do we need to disable irqs? Are we
> > expecting to be modifying the unit tests from irq contexts?
>
> There are instances where someone may want to test a driver which has
> an interrupt handler in it. I actually have (not the greatest) example
> here. Now in these cases, I expect someone to use a mock irqchip or
> some other fake mechanism to trigger the interrupt handler and not
> actual hardware; technically speaking in this case, it is not going to
> be accessed from a "real" irq context; however, the code under test
> should think that it is in an irq context; given that, I figured it is
> best to just treat it as a real irq context. Does that make sense?
Can you please describe the scenario in which grabbing the lock here,
updating a single variable, and then releasing the lock right after
does anything useful vs. not having the lock? I'm looking for a two CPU
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.
>
> > > +
> > > + return success;
> > > +}
> > > +
> > > +static void kunit_set_success(struct kunit *test, bool success)
> > > +{
> > > + unsigned long flags;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + test->success = success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> > > +}
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,
Kevin Hilman <khilman@baylibre.com>
Subject: Re: [PATCH v5 01/18] kunit: test: add KUnit test runner core
Date: Tue, 25 Jun 2019 20:40:59 -0700 [thread overview]
Message-ID: <20190626034100.B238520883@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46Jhxsz6_VXHEVYvTeDRwwzgKpr=aUWLL5b3S4kUukb8g@mail.gmail.com>
Quoting Brendan Higgins (2019-06-25 13:28:25)
> On Wed, Jun 19, 2019 at 5:15 PM Stephen Boyd <sboyd@kernel.org> wrote:
> >
> > Quoting Brendan Higgins (2019-06-17 01:25:56)
> > > diff --git a/kunit/test.c b/kunit/test.c
> > > new file mode 100644
> > > index 0000000000000..d05d254f1521f
> > > --- /dev/null
> > > +++ b/kunit/test.c
> > > @@ -0,0 +1,210 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Base unit test (KUnit) API.
> > > + *
> > > + * Copyright (C) 2019, Google LLC.
> > > + * Author: Brendan Higgins <brendanhiggins@google.com>
> > > + */
> > > +
> > > +#include <linux/sched/debug.h>
> > > +#include <kunit/test.h>
> > > +
> > > +static bool kunit_get_success(struct kunit *test)
> > > +{
> > > + unsigned long flags;
> > > + bool success;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + success = test->success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> >
> > I still don't understand the locking scheme in this code. Is the
> > intention to make getter and setter APIs that are "safe" by adding in a
> > spinlock that is held around getting and setting various members in the
> > kunit structure?
>
> Yes, your understanding is correct. It is possible for a user to write
> a test such that certain elements may be updated in different threads;
> this would most likely happen in the case where someone wants to make
> an assertion or an expectation in a thread created by a piece of code
> under test. Although this should generally be avoided, it is possible,
> and there are occasionally good reasons to do so, so it is
> functionality that we should support.
>
> Do you think I should add a comment to this effect?
No, I think the locking should be removed.
>
> > In what situation is there more than one thread reading or writing the
> > kunit struct? Isn't it only a single process that is going to be
>
> As I said above, it is possible that the code under test may spawn a
> new thread that may make an expectation or an assertion. It is not a
> super common use case, but it is possible.
Sure, sounds super possible and OK.
>
> > operating on this structure? And why do we need to disable irqs? Are we
> > expecting to be modifying the unit tests from irq contexts?
>
> There are instances where someone may want to test a driver which has
> an interrupt handler in it. I actually have (not the greatest) example
> here. Now in these cases, I expect someone to use a mock irqchip or
> some other fake mechanism to trigger the interrupt handler and not
> actual hardware; technically speaking in this case, it is not going to
> be accessed from a "real" irq context; however, the code under test
> should think that it is in an irq context; given that, I figured it is
> best to just treat it as a real irq context. Does that make sense?
Can you please describe the scenario in which grabbing the lock here,
updating a single variable, and then releasing the lock right after
does anything useful vs. not having the lock? I'm looking for a two CPU
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.
>
> > > +
> > > + return success;
> > > +}
> > > +
> > > +static void kunit_set_success(struct kunit *test, bool success)
> > > +{
> > > + unsigned long flags;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + test->success = success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> > > +}
_______________________________________________
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: 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: Tue, 25 Jun 2019 20:40:59 -0700 [thread overview]
Message-ID: <20190626034100.B238520883@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46Jhxsz6_VXHEVYvTeDRwwzgKpr=aUWLL5b3S4kUukb8g@mail.gmail.com>
Quoting Brendan Higgins (2019-06-25 13:28:25)
> On Wed, Jun 19, 2019 at 5:15 PM Stephen Boyd <sboyd@kernel.org> wrote:
> >
> > Quoting Brendan Higgins (2019-06-17 01:25:56)
> > > diff --git a/kunit/test.c b/kunit/test.c
> > > new file mode 100644
> > > index 0000000000000..d05d254f1521f
> > > --- /dev/null
> > > +++ b/kunit/test.c
> > > @@ -0,0 +1,210 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Base unit test (KUnit) API.
> > > + *
> > > + * Copyright (C) 2019, Google LLC.
> > > + * Author: Brendan Higgins <brendanhiggins@google.com>
> > > + */
> > > +
> > > +#include <linux/sched/debug.h>
> > > +#include <kunit/test.h>
> > > +
> > > +static bool kunit_get_success(struct kunit *test)
> > > +{
> > > + unsigned long flags;
> > > + bool success;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + success = test->success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> >
> > I still don't understand the locking scheme in this code. Is the
> > intention to make getter and setter APIs that are "safe" by adding in a
> > spinlock that is held around getting and setting various members in the
> > kunit structure?
>
> Yes, your understanding is correct. It is possible for a user to write
> a test such that certain elements may be updated in different threads;
> this would most likely happen in the case where someone wants to make
> an assertion or an expectation in a thread created by a piece of code
> under test. Although this should generally be avoided, it is possible,
> and there are occasionally good reasons to do so, so it is
> functionality that we should support.
>
> Do you think I should add a comment to this effect?
No, I think the locking should be removed.
>
> > In what situation is there more than one thread reading or writing the
> > kunit struct? Isn't it only a single process that is going to be
>
> As I said above, it is possible that the code under test may spawn a
> new thread that may make an expectation or an assertion. It is not a
> super common use case, but it is possible.
Sure, sounds super possible and OK.
>
> > operating on this structure? And why do we need to disable irqs? Are we
> > expecting to be modifying the unit tests from irq contexts?
>
> There are instances where someone may want to test a driver which has
> an interrupt handler in it. I actually have (not the greatest) example
> here. Now in these cases, I expect someone to use a mock irqchip or
> some other fake mechanism to trigger the interrupt handler and not
> actual hardware; technically speaking in this case, it is not going to
> be accessed from a "real" irq context; however, the code under test
> should think that it is in an irq context; given that, I figured it is
> best to just treat it as a real irq context. Does that make sense?
Can you please describe the scenario in which grabbing the lock here,
updating a single variable, and then releasing the lock right after
does anything useful vs. not having the lock? I'm looking for a two CPU
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.
>
> > > +
> > > + return success;
> > > +}
> > > +
> > > +static void kunit_set_success(struct kunit *test, bool success)
> > > +{
> > > + unsigned long flags;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + test->success = success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> > > +}
_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um
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: Tue, 25 Jun 2019 20:40:59 -0700 [thread overview]
Message-ID: <20190626034100.B238520883@mail.kernel.org> (raw)
In-Reply-To: <CAFd5g46Jhxsz6_VXHEVYvTeDRwwzgKpr=aUWLL5b3S4kUukb8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
Quoting Brendan Higgins (2019-06-25 13:28:25)
> On Wed, Jun 19, 2019 at 5:15 PM Stephen Boyd <sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote:
> >
> > Quoting Brendan Higgins (2019-06-17 01:25:56)
> > > diff --git a/kunit/test.c b/kunit/test.c
> > > new file mode 100644
> > > index 0000000000000..d05d254f1521f
> > > --- /dev/null
> > > +++ b/kunit/test.c
> > > @@ -0,0 +1,210 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Base unit test (KUnit) API.
> > > + *
> > > + * Copyright (C) 2019, Google LLC.
> > > + * Author: Brendan Higgins <brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
> > > + */
> > > +
> > > +#include <linux/sched/debug.h>
> > > +#include <kunit/test.h>
> > > +
> > > +static bool kunit_get_success(struct kunit *test)
> > > +{
> > > + unsigned long flags;
> > > + bool success;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + success = test->success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> >
> > I still don't understand the locking scheme in this code. Is the
> > intention to make getter and setter APIs that are "safe" by adding in a
> > spinlock that is held around getting and setting various members in the
> > kunit structure?
>
> Yes, your understanding is correct. It is possible for a user to write
> a test such that certain elements may be updated in different threads;
> this would most likely happen in the case where someone wants to make
> an assertion or an expectation in a thread created by a piece of code
> under test. Although this should generally be avoided, it is possible,
> and there are occasionally good reasons to do so, so it is
> functionality that we should support.
>
> Do you think I should add a comment to this effect?
No, I think the locking should be removed.
>
> > In what situation is there more than one thread reading or writing the
> > kunit struct? Isn't it only a single process that is going to be
>
> As I said above, it is possible that the code under test may spawn a
> new thread that may make an expectation or an assertion. It is not a
> super common use case, but it is possible.
Sure, sounds super possible and OK.
>
> > operating on this structure? And why do we need to disable irqs? Are we
> > expecting to be modifying the unit tests from irq contexts?
>
> There are instances where someone may want to test a driver which has
> an interrupt handler in it. I actually have (not the greatest) example
> here. Now in these cases, I expect someone to use a mock irqchip or
> some other fake mechanism to trigger the interrupt handler and not
> actual hardware; technically speaking in this case, it is not going to
> be accessed from a "real" irq context; however, the code under test
> should think that it is in an irq context; given that, I figured it is
> best to just treat it as a real irq context. Does that make sense?
Can you please describe the scenario in which grabbing the lock here,
updating a single variable, and then releasing the lock right after
does anything useful vs. not having the lock? I'm looking for a two CPU
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.
>
> > > +
> > > + return success;
> > > +}
> > > +
> > > +static void kunit_set_success(struct kunit *test, bool success)
> > > +{
> > > + unsigned long flags;
> > > +
> > > + spin_lock_irqsave(&test->lock, flags);
> > > + test->success = success;
> > > + spin_unlock_irqrestore(&test->lock, flags);
> > > +}
next prev parent reply other threads:[~2019-06-26 3:41 UTC|newest]
Thread overview: 188+ 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
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 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-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-27 0:05 ` Brendan Higgins
2019-06-27 0:05 ` Brendan Higgins
2019-06-26 3:40 ` Stephen Boyd [this message]
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-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-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 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-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 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: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 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 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 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-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-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 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 10/18] kunit: test: add tests 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 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 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 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
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-27 0:23 ` Brendan Higgins
2019-06-27 0:23 ` Brendan Higgins
2019-06-17 8:26 ` [PATCH v5 14/18] kunit: defconfig: add defconfigs for building " Brendan Higgins
2019-06-17 8:26 ` 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 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
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
[not found] ` <CAAXuY3p+kVhjQ4LYtzormqVcH2vKu1abc_K9Z0XY=JX=bp8NcQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
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
[not found] ` <CAFd5g45VJ9yfuESUc=E0ydJyN+mk1b1kyHSCYvO2x9KPC7+3GQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
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
2019-06-22 0:54 ` Brendan Higgins
2019-06-22 0:54 ` Brendan Higgins
2019-06-22 0:54 ` 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-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=20190626034100.B238520883@mail.kernel.org \
--to=sboyd@kernel.org \
--cc=Alexander.Levin@microsoft.com \
--cc=Tim.Bird@sony.com \
--cc=amir73il@gmail.com \
--cc=brendanhiggins@google.com \
--cc=dan.carpenter@oracle.com \
--cc=daniel@ffwll.ch \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=frowand.list@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=jdike@addtoit.com \
--cc=joel@jms.id.au \
--cc=jpoimboe@redhat.com \
--cc=julia.lawall@lip6.fr \
--cc=keescook@google.com \
--cc=khilman@baylibre.com \
--cc=kieran.bingham@ideasonboard.com \
--cc=knut.omang@oracle.com \
--cc=kunit-dev@googlegroups.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-nvdimm@lists.01.org \
--cc=linux-um@lists.infradead.org \
--cc=logang@deltatee.com \
--cc=mcgrof@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=peterz@infradead.org \
--cc=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.