From: shuah <shuah@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>,
frowand.list@gmail.com, gregkh@linuxfoundation.org,
keescook@google.com, kieran.bingham@ideasonboard.com,
mcgrof@kernel.org, robh@kernel.org, sboyd@kernel.org
Cc: 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,
knut.omang@oracle.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 04/17] kunit: test: add kunit_stream a std::stream like logger
Date: Thu, 2 May 2019 19:50:14 -0600 [thread overview]
Message-ID: <ead23600-eecd-cf74-bdd1-94a6964e29b2@kernel.org> (raw)
In-Reply-To: <20190501230126.229218-5-brendanhiggins@google.com>
On 5/1/19 5:01 PM, Brendan Higgins wrote:
> A lot of the expectation and assertion infrastructure prints out fairly
> complicated test failure messages, so add a C++ style log library for
> for logging test results.
>
> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
> ---
> include/kunit/kunit-stream.h | 85 ++++++++++++++++++++
> include/kunit/test.h | 2 +
> kunit/Makefile | 3 +-
> kunit/kunit-stream.c | 149 +++++++++++++++++++++++++++++++++++
> kunit/test.c | 8 ++
> 5 files changed, 246 insertions(+), 1 deletion(-)
> create mode 100644 include/kunit/kunit-stream.h
> create mode 100644 kunit/kunit-stream.c
>
> diff --git a/include/kunit/kunit-stream.h b/include/kunit/kunit-stream.h
> new file mode 100644
> index 0000000000000..d457a54fe0100
> --- /dev/null
> +++ b/include/kunit/kunit-stream.h
> @@ -0,0 +1,85 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins@google.com>
> + */
> +
> +#ifndef _KUNIT_KUNIT_STREAM_H
> +#define _KUNIT_KUNIT_STREAM_H
> +
> +#include <linux/types.h>
> +#include <kunit/string-stream.h>
> +
> +struct kunit;
> +
> +/**
> + * struct kunit_stream - a std::stream style string builder.
> + *
> + * A std::stream style string builder. Allows messages to be built up and
> + * printed all at once.
> + */
> +struct kunit_stream {
> + /* private: internal use only. */
> + struct kunit *test;
> + spinlock_t lock; /* Guards level. */
> + const char *level;
> + struct string_stream *internal_stream;
> +};
> +
> +/**
> + * kunit_new_stream() - constructs a new &struct kunit_stream.
> + * @test: The test context object.
> + *
> + * Constructs a new test managed &struct kunit_stream.
> + */
> +struct kunit_stream *kunit_new_stream(struct kunit *test);
> +
> +/**
> + * kunit_stream_set_level(): sets the level that string should be printed at.
> + * @this: the stream being operated on.
> + * @level: the print level the stream is set to output to.
> + *
> + * Sets the print level at which the stream outputs.
> + */
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level);
> +
> +/**
> + * kunit_stream_add(): adds the formatted input to the internal buffer.
> + * @this: the stream being operated on.
> + * @fmt: printf style format string to append to stream.
> + *
> + * Appends the formatted string, @fmt, to the internal buffer.
> + */
> +void __printf(2, 3) kunit_stream_add(struct kunit_stream *this,
> + const char *fmt, ...);
> +
> +/**
> + * kunit_stream_append(): appends the contents of @other to @this.
> + * @this: the stream to which @other is appended.
> + * @other: the stream whose contents are appended to @this.
> + *
> + * Appends the contents of @other to @this.
> + */
> +void kunit_stream_append(struct kunit_stream *this, struct kunit_stream *other);
> +
> +/**
> + * kunit_stream_commit(): prints out the internal buffer to the user.
> + * @this: the stream being operated on.
> + *
> + * Outputs the contents of the internal buffer as a kunit_printk formatted
> + * output.
> + */
> +void kunit_stream_commit(struct kunit_stream *this);
> +
> +/**
> + * kunit_stream_clear(): clears the internal buffer.
> + * @this: the stream being operated on.
> + *
> + * Clears the contents of the internal buffer.
> + */
> +void kunit_stream_clear(struct kunit_stream *this);
> +
> +#endif /* _KUNIT_KUNIT_STREAM_H */
> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index 819edd8db4e81..4668e8a635954 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -11,6 +11,7 @@
>
> #include <linux/types.h>
> #include <linux/slab.h>
> +#include <kunit/kunit-stream.h>
>
> struct kunit_resource;
>
> @@ -171,6 +172,7 @@ struct kunit {
> void (*vprintk)(const struct kunit *test,
> const char *level,
> struct va_format *vaf);
> + void (*fail)(struct kunit *test, struct kunit_stream *stream);
> };
>
> int kunit_init_test(struct kunit *test, const char *name);
> diff --git a/kunit/Makefile b/kunit/Makefile
> index 275b565a0e81f..6ddc622ee6b1c 100644
> --- a/kunit/Makefile
> +++ b/kunit/Makefile
> @@ -1,2 +1,3 @@
> obj-$(CONFIG_KUNIT) += test.o \
> - string-stream.o
> + string-stream.o \
> + kunit-stream.o
> diff --git a/kunit/kunit-stream.c b/kunit/kunit-stream.c
> new file mode 100644
> index 0000000000000..93c14eec03844
> --- /dev/null
> +++ b/kunit/kunit-stream.c
> @@ -0,0 +1,149 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins@google.com>
> + */
> +
> +#include <kunit/test.h>
> +#include <kunit/kunit-stream.h>
> +#include <kunit/string-stream.h>
> +
> +const char *kunit_stream_get_level(struct kunit_stream *this)
> +{
> + unsigned long flags;
> + const char *level;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + level = this->level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +
> + return level;
> +}
> +
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + this->level = level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +}
> +
> +void kunit_stream_add(struct kunit_stream *this, const char *fmt, ...)
> +{
> + va_list args;
> + struct string_stream *stream = this->internal_stream;
> +
> + va_start(args, fmt);
> +
> + if (string_stream_vadd(stream, fmt, args) < 0)
> + kunit_err(this->test, "Failed to allocate fragment: %s\n", fmt);
> +
> + va_end(args);
> +}
> +
> +void kunit_stream_append(struct kunit_stream *this,
> + struct kunit_stream *other)
> +{
> + struct string_stream *other_stream = other->internal_stream;
> + const char *other_content;
> +
> + other_content = string_stream_get_string(other_stream);
> +
> + if (!other_content) {
> + kunit_err(this->test,
> + "Failed to get string from second argument for appending.\n");
> + return;
> + }
> +
> + kunit_stream_add(this, other_content);
> +}
> +
> +void kunit_stream_clear(struct kunit_stream *this)
> +{
> + string_stream_clear(this->internal_stream);
> +}
> +
> +void kunit_stream_commit(struct kunit_stream *this)
> +{
> + struct string_stream *stream = this->internal_stream;
> + struct string_stream_fragment *fragment;
> + const char *level;
> + char *buf;
> +
> + level = kunit_stream_get_level(this);
> + if (!level) {
> + kunit_err(this->test,
> + "Stream was committed without a specified log level.\n");
> + level = KERN_ERR;
> + kunit_stream_set_level(this, level);
> + }
> +
> + buf = string_stream_get_string(stream);
> + if (!buf) {
> + kunit_err(this->test,
> + "Could not allocate buffer, dumping stream:\n");
> + list_for_each_entry(fragment, &stream->fragments, node) {
> + kunit_err(this->test, fragment->fragment);
> + }
> + kunit_err(this->test, "\n");
> + goto cleanup;
> + }
> +
> + kunit_printk(level, this->test, buf);
> + kfree(buf);
> +
> +cleanup:
> + kunit_stream_clear(this);
> +}
> +
> +static int kunit_stream_init(struct kunit_resource *res, void *context)
> +{
> + struct kunit *test = context;
> + struct kunit_stream *stream;
> +
> + stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> + if (!stream)
> + return -ENOMEM;
> + res->allocation = stream;
> + stream->test = test;
> + spin_lock_init(&stream->lock);
> + stream->internal_stream = new_string_stream();
> +
> + if (!stream->internal_stream)
> + return -ENOMEM;
What happens to stream? Don't you want to free that?
> +
> + return 0;
> +}
> +
> +static void kunit_stream_free(struct kunit_resource *res)
> +{
> + struct kunit_stream *stream = res->allocation;
> +
> + if (!string_stream_is_empty(stream->internal_stream)) {
> + kunit_err(stream->test,
> + "End of test case reached with uncommitted stream entries.\n");
> + kunit_stream_commit(stream);
> + }
> +
> + destroy_string_stream(stream->internal_stream);
> + kfree(stream);
> +}
> +
> +struct kunit_stream *kunit_new_stream(struct kunit *test)
> +{
> + struct kunit_resource *res;
> +
> + res = kunit_alloc_resource(test,
> + kunit_stream_init,
> + kunit_stream_free,
> + test);
> +
> + if (res)
> + return res->allocation;
> + else
> + return NULL;
> +}
> diff --git a/kunit/test.c b/kunit/test.c
> index 541f9adb1608c..f7575b127e2df 100644
> --- a/kunit/test.c
> +++ b/kunit/test.c
> @@ -63,12 +63,20 @@ static void kunit_vprintk(const struct kunit *test,
> "kunit %s: %pV", test->name, vaf);
> }
>
> +static void kunit_fail(struct kunit *test, struct kunit_stream *stream)
> +{
> + kunit_set_success(test, false);
> + kunit_stream_set_level(stream, KERN_ERR);
> + kunit_stream_commit(stream);
> +}
> +
> int kunit_init_test(struct kunit *test, const char *name)
> {
> spin_lock_init(&test->lock);
> INIT_LIST_HEAD(&test->resources);
> test->name = name;
> test->vprintk = kunit_vprintk;
> + test->fail = kunit_fail;
>
> return 0;
> }
>
thanks,
-- Shuah
WARNING: multiple messages have this Message-ID (diff)
From: shuah at kernel.org (shuah)
Subject: [PATCH v2 04/17] kunit: test: add kunit_stream a std::stream like logger
Date: Thu, 2 May 2019 19:50:14 -0600 [thread overview]
Message-ID: <ead23600-eecd-cf74-bdd1-94a6964e29b2@kernel.org> (raw)
In-Reply-To: <20190501230126.229218-5-brendanhiggins@google.com>
On 5/1/19 5:01 PM, Brendan Higgins wrote:
> A lot of the expectation and assertion infrastructure prints out fairly
> complicated test failure messages, so add a C++ style log library for
> for logging test results.
>
> Signed-off-by: Brendan Higgins <brendanhiggins at google.com>
> ---
> include/kunit/kunit-stream.h | 85 ++++++++++++++++++++
> include/kunit/test.h | 2 +
> kunit/Makefile | 3 +-
> kunit/kunit-stream.c | 149 +++++++++++++++++++++++++++++++++++
> kunit/test.c | 8 ++
> 5 files changed, 246 insertions(+), 1 deletion(-)
> create mode 100644 include/kunit/kunit-stream.h
> create mode 100644 kunit/kunit-stream.c
>
> diff --git a/include/kunit/kunit-stream.h b/include/kunit/kunit-stream.h
> new file mode 100644
> index 0000000000000..d457a54fe0100
> --- /dev/null
> +++ b/include/kunit/kunit-stream.h
> @@ -0,0 +1,85 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins at google.com>
> + */
> +
> +#ifndef _KUNIT_KUNIT_STREAM_H
> +#define _KUNIT_KUNIT_STREAM_H
> +
> +#include <linux/types.h>
> +#include <kunit/string-stream.h>
> +
> +struct kunit;
> +
> +/**
> + * struct kunit_stream - a std::stream style string builder.
> + *
> + * A std::stream style string builder. Allows messages to be built up and
> + * printed all at once.
> + */
> +struct kunit_stream {
> + /* private: internal use only. */
> + struct kunit *test;
> + spinlock_t lock; /* Guards level. */
> + const char *level;
> + struct string_stream *internal_stream;
> +};
> +
> +/**
> + * kunit_new_stream() - constructs a new &struct kunit_stream.
> + * @test: The test context object.
> + *
> + * Constructs a new test managed &struct kunit_stream.
> + */
> +struct kunit_stream *kunit_new_stream(struct kunit *test);
> +
> +/**
> + * kunit_stream_set_level(): sets the level that string should be printed at.
> + * @this: the stream being operated on.
> + * @level: the print level the stream is set to output to.
> + *
> + * Sets the print level at which the stream outputs.
> + */
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level);
> +
> +/**
> + * kunit_stream_add(): adds the formatted input to the internal buffer.
> + * @this: the stream being operated on.
> + * @fmt: printf style format string to append to stream.
> + *
> + * Appends the formatted string, @fmt, to the internal buffer.
> + */
> +void __printf(2, 3) kunit_stream_add(struct kunit_stream *this,
> + const char *fmt, ...);
> +
> +/**
> + * kunit_stream_append(): appends the contents of @other to @this.
> + * @this: the stream to which @other is appended.
> + * @other: the stream whose contents are appended to @this.
> + *
> + * Appends the contents of @other to @this.
> + */
> +void kunit_stream_append(struct kunit_stream *this, struct kunit_stream *other);
> +
> +/**
> + * kunit_stream_commit(): prints out the internal buffer to the user.
> + * @this: the stream being operated on.
> + *
> + * Outputs the contents of the internal buffer as a kunit_printk formatted
> + * output.
> + */
> +void kunit_stream_commit(struct kunit_stream *this);
> +
> +/**
> + * kunit_stream_clear(): clears the internal buffer.
> + * @this: the stream being operated on.
> + *
> + * Clears the contents of the internal buffer.
> + */
> +void kunit_stream_clear(struct kunit_stream *this);
> +
> +#endif /* _KUNIT_KUNIT_STREAM_H */
> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index 819edd8db4e81..4668e8a635954 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -11,6 +11,7 @@
>
> #include <linux/types.h>
> #include <linux/slab.h>
> +#include <kunit/kunit-stream.h>
>
> struct kunit_resource;
>
> @@ -171,6 +172,7 @@ struct kunit {
> void (*vprintk)(const struct kunit *test,
> const char *level,
> struct va_format *vaf);
> + void (*fail)(struct kunit *test, struct kunit_stream *stream);
> };
>
> int kunit_init_test(struct kunit *test, const char *name);
> diff --git a/kunit/Makefile b/kunit/Makefile
> index 275b565a0e81f..6ddc622ee6b1c 100644
> --- a/kunit/Makefile
> +++ b/kunit/Makefile
> @@ -1,2 +1,3 @@
> obj-$(CONFIG_KUNIT) += test.o \
> - string-stream.o
> + string-stream.o \
> + kunit-stream.o
> diff --git a/kunit/kunit-stream.c b/kunit/kunit-stream.c
> new file mode 100644
> index 0000000000000..93c14eec03844
> --- /dev/null
> +++ b/kunit/kunit-stream.c
> @@ -0,0 +1,149 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins at google.com>
> + */
> +
> +#include <kunit/test.h>
> +#include <kunit/kunit-stream.h>
> +#include <kunit/string-stream.h>
> +
> +const char *kunit_stream_get_level(struct kunit_stream *this)
> +{
> + unsigned long flags;
> + const char *level;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + level = this->level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +
> + return level;
> +}
> +
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + this->level = level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +}
> +
> +void kunit_stream_add(struct kunit_stream *this, const char *fmt, ...)
> +{
> + va_list args;
> + struct string_stream *stream = this->internal_stream;
> +
> + va_start(args, fmt);
> +
> + if (string_stream_vadd(stream, fmt, args) < 0)
> + kunit_err(this->test, "Failed to allocate fragment: %s\n", fmt);
> +
> + va_end(args);
> +}
> +
> +void kunit_stream_append(struct kunit_stream *this,
> + struct kunit_stream *other)
> +{
> + struct string_stream *other_stream = other->internal_stream;
> + const char *other_content;
> +
> + other_content = string_stream_get_string(other_stream);
> +
> + if (!other_content) {
> + kunit_err(this->test,
> + "Failed to get string from second argument for appending.\n");
> + return;
> + }
> +
> + kunit_stream_add(this, other_content);
> +}
> +
> +void kunit_stream_clear(struct kunit_stream *this)
> +{
> + string_stream_clear(this->internal_stream);
> +}
> +
> +void kunit_stream_commit(struct kunit_stream *this)
> +{
> + struct string_stream *stream = this->internal_stream;
> + struct string_stream_fragment *fragment;
> + const char *level;
> + char *buf;
> +
> + level = kunit_stream_get_level(this);
> + if (!level) {
> + kunit_err(this->test,
> + "Stream was committed without a specified log level.\n");
> + level = KERN_ERR;
> + kunit_stream_set_level(this, level);
> + }
> +
> + buf = string_stream_get_string(stream);
> + if (!buf) {
> + kunit_err(this->test,
> + "Could not allocate buffer, dumping stream:\n");
> + list_for_each_entry(fragment, &stream->fragments, node) {
> + kunit_err(this->test, fragment->fragment);
> + }
> + kunit_err(this->test, "\n");
> + goto cleanup;
> + }
> +
> + kunit_printk(level, this->test, buf);
> + kfree(buf);
> +
> +cleanup:
> + kunit_stream_clear(this);
> +}
> +
> +static int kunit_stream_init(struct kunit_resource *res, void *context)
> +{
> + struct kunit *test = context;
> + struct kunit_stream *stream;
> +
> + stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> + if (!stream)
> + return -ENOMEM;
> + res->allocation = stream;
> + stream->test = test;
> + spin_lock_init(&stream->lock);
> + stream->internal_stream = new_string_stream();
> +
> + if (!stream->internal_stream)
> + return -ENOMEM;
What happens to stream? Don't you want to free that?
> +
> + return 0;
> +}
> +
> +static void kunit_stream_free(struct kunit_resource *res)
> +{
> + struct kunit_stream *stream = res->allocation;
> +
> + if (!string_stream_is_empty(stream->internal_stream)) {
> + kunit_err(stream->test,
> + "End of test case reached with uncommitted stream entries.\n");
> + kunit_stream_commit(stream);
> + }
> +
> + destroy_string_stream(stream->internal_stream);
> + kfree(stream);
> +}
> +
> +struct kunit_stream *kunit_new_stream(struct kunit *test)
> +{
> + struct kunit_resource *res;
> +
> + res = kunit_alloc_resource(test,
> + kunit_stream_init,
> + kunit_stream_free,
> + test);
> +
> + if (res)
> + return res->allocation;
> + else
> + return NULL;
> +}
> diff --git a/kunit/test.c b/kunit/test.c
> index 541f9adb1608c..f7575b127e2df 100644
> --- a/kunit/test.c
> +++ b/kunit/test.c
> @@ -63,12 +63,20 @@ static void kunit_vprintk(const struct kunit *test,
> "kunit %s: %pV", test->name, vaf);
> }
>
> +static void kunit_fail(struct kunit *test, struct kunit_stream *stream)
> +{
> + kunit_set_success(test, false);
> + kunit_stream_set_level(stream, KERN_ERR);
> + kunit_stream_commit(stream);
> +}
> +
> int kunit_init_test(struct kunit *test, const char *name)
> {
> spin_lock_init(&test->lock);
> INIT_LIST_HEAD(&test->resources);
> test->name = name;
> test->vprintk = kunit_vprintk;
> + test->fail = kunit_fail;
>
> return 0;
> }
>
thanks,
-- Shuah
WARNING: multiple messages have this Message-ID (diff)
From: shuah@kernel.org (shuah)
Subject: [PATCH v2 04/17] kunit: test: add kunit_stream a std::stream like logger
Date: Thu, 2 May 2019 19:50:14 -0600 [thread overview]
Message-ID: <ead23600-eecd-cf74-bdd1-94a6964e29b2@kernel.org> (raw)
Message-ID: <20190503015014.RVtr9_Qib563YhWicwcV-EzCAbu7xNeDZlArQ87_W8o@z> (raw)
In-Reply-To: <20190501230126.229218-5-brendanhiggins@google.com>
On 5/1/19 5:01 PM, Brendan Higgins wrote:
> A lot of the expectation and assertion infrastructure prints out fairly
> complicated test failure messages, so add a C++ style log library for
> for logging test results.
>
> Signed-off-by: Brendan Higgins <brendanhiggins at google.com>
> ---
> include/kunit/kunit-stream.h | 85 ++++++++++++++++++++
> include/kunit/test.h | 2 +
> kunit/Makefile | 3 +-
> kunit/kunit-stream.c | 149 +++++++++++++++++++++++++++++++++++
> kunit/test.c | 8 ++
> 5 files changed, 246 insertions(+), 1 deletion(-)
> create mode 100644 include/kunit/kunit-stream.h
> create mode 100644 kunit/kunit-stream.c
>
> diff --git a/include/kunit/kunit-stream.h b/include/kunit/kunit-stream.h
> new file mode 100644
> index 0000000000000..d457a54fe0100
> --- /dev/null
> +++ b/include/kunit/kunit-stream.h
> @@ -0,0 +1,85 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins at google.com>
> + */
> +
> +#ifndef _KUNIT_KUNIT_STREAM_H
> +#define _KUNIT_KUNIT_STREAM_H
> +
> +#include <linux/types.h>
> +#include <kunit/string-stream.h>
> +
> +struct kunit;
> +
> +/**
> + * struct kunit_stream - a std::stream style string builder.
> + *
> + * A std::stream style string builder. Allows messages to be built up and
> + * printed all at once.
> + */
> +struct kunit_stream {
> + /* private: internal use only. */
> + struct kunit *test;
> + spinlock_t lock; /* Guards level. */
> + const char *level;
> + struct string_stream *internal_stream;
> +};
> +
> +/**
> + * kunit_new_stream() - constructs a new &struct kunit_stream.
> + * @test: The test context object.
> + *
> + * Constructs a new test managed &struct kunit_stream.
> + */
> +struct kunit_stream *kunit_new_stream(struct kunit *test);
> +
> +/**
> + * kunit_stream_set_level(): sets the level that string should be printed at.
> + * @this: the stream being operated on.
> + * @level: the print level the stream is set to output to.
> + *
> + * Sets the print level at which the stream outputs.
> + */
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level);
> +
> +/**
> + * kunit_stream_add(): adds the formatted input to the internal buffer.
> + * @this: the stream being operated on.
> + * @fmt: printf style format string to append to stream.
> + *
> + * Appends the formatted string, @fmt, to the internal buffer.
> + */
> +void __printf(2, 3) kunit_stream_add(struct kunit_stream *this,
> + const char *fmt, ...);
> +
> +/**
> + * kunit_stream_append(): appends the contents of @other to @this.
> + * @this: the stream to which @other is appended.
> + * @other: the stream whose contents are appended to @this.
> + *
> + * Appends the contents of @other to @this.
> + */
> +void kunit_stream_append(struct kunit_stream *this, struct kunit_stream *other);
> +
> +/**
> + * kunit_stream_commit(): prints out the internal buffer to the user.
> + * @this: the stream being operated on.
> + *
> + * Outputs the contents of the internal buffer as a kunit_printk formatted
> + * output.
> + */
> +void kunit_stream_commit(struct kunit_stream *this);
> +
> +/**
> + * kunit_stream_clear(): clears the internal buffer.
> + * @this: the stream being operated on.
> + *
> + * Clears the contents of the internal buffer.
> + */
> +void kunit_stream_clear(struct kunit_stream *this);
> +
> +#endif /* _KUNIT_KUNIT_STREAM_H */
> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index 819edd8db4e81..4668e8a635954 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -11,6 +11,7 @@
>
> #include <linux/types.h>
> #include <linux/slab.h>
> +#include <kunit/kunit-stream.h>
>
> struct kunit_resource;
>
> @@ -171,6 +172,7 @@ struct kunit {
> void (*vprintk)(const struct kunit *test,
> const char *level,
> struct va_format *vaf);
> + void (*fail)(struct kunit *test, struct kunit_stream *stream);
> };
>
> int kunit_init_test(struct kunit *test, const char *name);
> diff --git a/kunit/Makefile b/kunit/Makefile
> index 275b565a0e81f..6ddc622ee6b1c 100644
> --- a/kunit/Makefile
> +++ b/kunit/Makefile
> @@ -1,2 +1,3 @@
> obj-$(CONFIG_KUNIT) += test.o \
> - string-stream.o
> + string-stream.o \
> + kunit-stream.o
> diff --git a/kunit/kunit-stream.c b/kunit/kunit-stream.c
> new file mode 100644
> index 0000000000000..93c14eec03844
> --- /dev/null
> +++ b/kunit/kunit-stream.c
> @@ -0,0 +1,149 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins at google.com>
> + */
> +
> +#include <kunit/test.h>
> +#include <kunit/kunit-stream.h>
> +#include <kunit/string-stream.h>
> +
> +const char *kunit_stream_get_level(struct kunit_stream *this)
> +{
> + unsigned long flags;
> + const char *level;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + level = this->level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +
> + return level;
> +}
> +
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + this->level = level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +}
> +
> +void kunit_stream_add(struct kunit_stream *this, const char *fmt, ...)
> +{
> + va_list args;
> + struct string_stream *stream = this->internal_stream;
> +
> + va_start(args, fmt);
> +
> + if (string_stream_vadd(stream, fmt, args) < 0)
> + kunit_err(this->test, "Failed to allocate fragment: %s\n", fmt);
> +
> + va_end(args);
> +}
> +
> +void kunit_stream_append(struct kunit_stream *this,
> + struct kunit_stream *other)
> +{
> + struct string_stream *other_stream = other->internal_stream;
> + const char *other_content;
> +
> + other_content = string_stream_get_string(other_stream);
> +
> + if (!other_content) {
> + kunit_err(this->test,
> + "Failed to get string from second argument for appending.\n");
> + return;
> + }
> +
> + kunit_stream_add(this, other_content);
> +}
> +
> +void kunit_stream_clear(struct kunit_stream *this)
> +{
> + string_stream_clear(this->internal_stream);
> +}
> +
> +void kunit_stream_commit(struct kunit_stream *this)
> +{
> + struct string_stream *stream = this->internal_stream;
> + struct string_stream_fragment *fragment;
> + const char *level;
> + char *buf;
> +
> + level = kunit_stream_get_level(this);
> + if (!level) {
> + kunit_err(this->test,
> + "Stream was committed without a specified log level.\n");
> + level = KERN_ERR;
> + kunit_stream_set_level(this, level);
> + }
> +
> + buf = string_stream_get_string(stream);
> + if (!buf) {
> + kunit_err(this->test,
> + "Could not allocate buffer, dumping stream:\n");
> + list_for_each_entry(fragment, &stream->fragments, node) {
> + kunit_err(this->test, fragment->fragment);
> + }
> + kunit_err(this->test, "\n");
> + goto cleanup;
> + }
> +
> + kunit_printk(level, this->test, buf);
> + kfree(buf);
> +
> +cleanup:
> + kunit_stream_clear(this);
> +}
> +
> +static int kunit_stream_init(struct kunit_resource *res, void *context)
> +{
> + struct kunit *test = context;
> + struct kunit_stream *stream;
> +
> + stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> + if (!stream)
> + return -ENOMEM;
> + res->allocation = stream;
> + stream->test = test;
> + spin_lock_init(&stream->lock);
> + stream->internal_stream = new_string_stream();
> +
> + if (!stream->internal_stream)
> + return -ENOMEM;
What happens to stream? Don't you want to free that?
> +
> + return 0;
> +}
> +
> +static void kunit_stream_free(struct kunit_resource *res)
> +{
> + struct kunit_stream *stream = res->allocation;
> +
> + if (!string_stream_is_empty(stream->internal_stream)) {
> + kunit_err(stream->test,
> + "End of test case reached with uncommitted stream entries.\n");
> + kunit_stream_commit(stream);
> + }
> +
> + destroy_string_stream(stream->internal_stream);
> + kfree(stream);
> +}
> +
> +struct kunit_stream *kunit_new_stream(struct kunit *test)
> +{
> + struct kunit_resource *res;
> +
> + res = kunit_alloc_resource(test,
> + kunit_stream_init,
> + kunit_stream_free,
> + test);
> +
> + if (res)
> + return res->allocation;
> + else
> + return NULL;
> +}
> diff --git a/kunit/test.c b/kunit/test.c
> index 541f9adb1608c..f7575b127e2df 100644
> --- a/kunit/test.c
> +++ b/kunit/test.c
> @@ -63,12 +63,20 @@ static void kunit_vprintk(const struct kunit *test,
> "kunit %s: %pV", test->name, vaf);
> }
>
> +static void kunit_fail(struct kunit *test, struct kunit_stream *stream)
> +{
> + kunit_set_success(test, false);
> + kunit_stream_set_level(stream, KERN_ERR);
> + kunit_stream_commit(stream);
> +}
> +
> int kunit_init_test(struct kunit *test, const char *name)
> {
> spin_lock_init(&test->lock);
> INIT_LIST_HEAD(&test->resources);
> test->name = name;
> test->vprintk = kunit_vprintk;
> + test->fail = kunit_fail;
>
> return 0;
> }
>
thanks,
-- Shuah
WARNING: multiple messages have this Message-ID (diff)
From: shuah <shuah@kernel.org>
To: Brendan Higgins <brendanhiggins@google.com>,
frowand.list@gmail.com, gregkh@linuxfoundation.org,
keescook@google.com, kieran.bingham@ideasonboard.com,
mcgrof@kernel.org, robh@kernel.org, sboyd@kernel.org
Cc: pmladek@suse.com, linux-doc@vger.kernel.org, amir73il@gmail.com,
dri-devel@lists.freedesktop.org, Alexander.Levin@microsoft.com,
linux-kselftest@vger.kernel.org, linux-nvdimm@lists.01.org,
khilman@baylibre.com, knut.omang@oracle.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,
linux-kernel@vger.kernel.org, daniel@ffwll.ch,
mpe@ellerman.id.au, linux-fsdevel@vger.kernel.org,
logang@deltatee.com
Subject: Re: [PATCH v2 04/17] kunit: test: add kunit_stream a std::stream like logger
Date: Thu, 2 May 2019 19:50:14 -0600 [thread overview]
Message-ID: <ead23600-eecd-cf74-bdd1-94a6964e29b2@kernel.org> (raw)
In-Reply-To: <20190501230126.229218-5-brendanhiggins@google.com>
On 5/1/19 5:01 PM, Brendan Higgins wrote:
> A lot of the expectation and assertion infrastructure prints out fairly
> complicated test failure messages, so add a C++ style log library for
> for logging test results.
>
> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
> ---
> include/kunit/kunit-stream.h | 85 ++++++++++++++++++++
> include/kunit/test.h | 2 +
> kunit/Makefile | 3 +-
> kunit/kunit-stream.c | 149 +++++++++++++++++++++++++++++++++++
> kunit/test.c | 8 ++
> 5 files changed, 246 insertions(+), 1 deletion(-)
> create mode 100644 include/kunit/kunit-stream.h
> create mode 100644 kunit/kunit-stream.c
>
> diff --git a/include/kunit/kunit-stream.h b/include/kunit/kunit-stream.h
> new file mode 100644
> index 0000000000000..d457a54fe0100
> --- /dev/null
> +++ b/include/kunit/kunit-stream.h
> @@ -0,0 +1,85 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins@google.com>
> + */
> +
> +#ifndef _KUNIT_KUNIT_STREAM_H
> +#define _KUNIT_KUNIT_STREAM_H
> +
> +#include <linux/types.h>
> +#include <kunit/string-stream.h>
> +
> +struct kunit;
> +
> +/**
> + * struct kunit_stream - a std::stream style string builder.
> + *
> + * A std::stream style string builder. Allows messages to be built up and
> + * printed all at once.
> + */
> +struct kunit_stream {
> + /* private: internal use only. */
> + struct kunit *test;
> + spinlock_t lock; /* Guards level. */
> + const char *level;
> + struct string_stream *internal_stream;
> +};
> +
> +/**
> + * kunit_new_stream() - constructs a new &struct kunit_stream.
> + * @test: The test context object.
> + *
> + * Constructs a new test managed &struct kunit_stream.
> + */
> +struct kunit_stream *kunit_new_stream(struct kunit *test);
> +
> +/**
> + * kunit_stream_set_level(): sets the level that string should be printed at.
> + * @this: the stream being operated on.
> + * @level: the print level the stream is set to output to.
> + *
> + * Sets the print level at which the stream outputs.
> + */
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level);
> +
> +/**
> + * kunit_stream_add(): adds the formatted input to the internal buffer.
> + * @this: the stream being operated on.
> + * @fmt: printf style format string to append to stream.
> + *
> + * Appends the formatted string, @fmt, to the internal buffer.
> + */
> +void __printf(2, 3) kunit_stream_add(struct kunit_stream *this,
> + const char *fmt, ...);
> +
> +/**
> + * kunit_stream_append(): appends the contents of @other to @this.
> + * @this: the stream to which @other is appended.
> + * @other: the stream whose contents are appended to @this.
> + *
> + * Appends the contents of @other to @this.
> + */
> +void kunit_stream_append(struct kunit_stream *this, struct kunit_stream *other);
> +
> +/**
> + * kunit_stream_commit(): prints out the internal buffer to the user.
> + * @this: the stream being operated on.
> + *
> + * Outputs the contents of the internal buffer as a kunit_printk formatted
> + * output.
> + */
> +void kunit_stream_commit(struct kunit_stream *this);
> +
> +/**
> + * kunit_stream_clear(): clears the internal buffer.
> + * @this: the stream being operated on.
> + *
> + * Clears the contents of the internal buffer.
> + */
> +void kunit_stream_clear(struct kunit_stream *this);
> +
> +#endif /* _KUNIT_KUNIT_STREAM_H */
> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index 819edd8db4e81..4668e8a635954 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -11,6 +11,7 @@
>
> #include <linux/types.h>
> #include <linux/slab.h>
> +#include <kunit/kunit-stream.h>
>
> struct kunit_resource;
>
> @@ -171,6 +172,7 @@ struct kunit {
> void (*vprintk)(const struct kunit *test,
> const char *level,
> struct va_format *vaf);
> + void (*fail)(struct kunit *test, struct kunit_stream *stream);
> };
>
> int kunit_init_test(struct kunit *test, const char *name);
> diff --git a/kunit/Makefile b/kunit/Makefile
> index 275b565a0e81f..6ddc622ee6b1c 100644
> --- a/kunit/Makefile
> +++ b/kunit/Makefile
> @@ -1,2 +1,3 @@
> obj-$(CONFIG_KUNIT) += test.o \
> - string-stream.o
> + string-stream.o \
> + kunit-stream.o
> diff --git a/kunit/kunit-stream.c b/kunit/kunit-stream.c
> new file mode 100644
> index 0000000000000..93c14eec03844
> --- /dev/null
> +++ b/kunit/kunit-stream.c
> @@ -0,0 +1,149 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * C++ stream style string formatter and printer used in KUnit for outputting
> + * KUnit messages.
> + *
> + * Copyright (C) 2019, Google LLC.
> + * Author: Brendan Higgins <brendanhiggins@google.com>
> + */
> +
> +#include <kunit/test.h>
> +#include <kunit/kunit-stream.h>
> +#include <kunit/string-stream.h>
> +
> +const char *kunit_stream_get_level(struct kunit_stream *this)
> +{
> + unsigned long flags;
> + const char *level;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + level = this->level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +
> + return level;
> +}
> +
> +void kunit_stream_set_level(struct kunit_stream *this, const char *level)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&this->lock, flags);
> + this->level = level;
> + spin_unlock_irqrestore(&this->lock, flags);
> +}
> +
> +void kunit_stream_add(struct kunit_stream *this, const char *fmt, ...)
> +{
> + va_list args;
> + struct string_stream *stream = this->internal_stream;
> +
> + va_start(args, fmt);
> +
> + if (string_stream_vadd(stream, fmt, args) < 0)
> + kunit_err(this->test, "Failed to allocate fragment: %s\n", fmt);
> +
> + va_end(args);
> +}
> +
> +void kunit_stream_append(struct kunit_stream *this,
> + struct kunit_stream *other)
> +{
> + struct string_stream *other_stream = other->internal_stream;
> + const char *other_content;
> +
> + other_content = string_stream_get_string(other_stream);
> +
> + if (!other_content) {
> + kunit_err(this->test,
> + "Failed to get string from second argument for appending.\n");
> + return;
> + }
> +
> + kunit_stream_add(this, other_content);
> +}
> +
> +void kunit_stream_clear(struct kunit_stream *this)
> +{
> + string_stream_clear(this->internal_stream);
> +}
> +
> +void kunit_stream_commit(struct kunit_stream *this)
> +{
> + struct string_stream *stream = this->internal_stream;
> + struct string_stream_fragment *fragment;
> + const char *level;
> + char *buf;
> +
> + level = kunit_stream_get_level(this);
> + if (!level) {
> + kunit_err(this->test,
> + "Stream was committed without a specified log level.\n");
> + level = KERN_ERR;
> + kunit_stream_set_level(this, level);
> + }
> +
> + buf = string_stream_get_string(stream);
> + if (!buf) {
> + kunit_err(this->test,
> + "Could not allocate buffer, dumping stream:\n");
> + list_for_each_entry(fragment, &stream->fragments, node) {
> + kunit_err(this->test, fragment->fragment);
> + }
> + kunit_err(this->test, "\n");
> + goto cleanup;
> + }
> +
> + kunit_printk(level, this->test, buf);
> + kfree(buf);
> +
> +cleanup:
> + kunit_stream_clear(this);
> +}
> +
> +static int kunit_stream_init(struct kunit_resource *res, void *context)
> +{
> + struct kunit *test = context;
> + struct kunit_stream *stream;
> +
> + stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> + if (!stream)
> + return -ENOMEM;
> + res->allocation = stream;
> + stream->test = test;
> + spin_lock_init(&stream->lock);
> + stream->internal_stream = new_string_stream();
> +
> + if (!stream->internal_stream)
> + return -ENOMEM;
What happens to stream? Don't you want to free that?
> +
> + return 0;
> +}
> +
> +static void kunit_stream_free(struct kunit_resource *res)
> +{
> + struct kunit_stream *stream = res->allocation;
> +
> + if (!string_stream_is_empty(stream->internal_stream)) {
> + kunit_err(stream->test,
> + "End of test case reached with uncommitted stream entries.\n");
> + kunit_stream_commit(stream);
> + }
> +
> + destroy_string_stream(stream->internal_stream);
> + kfree(stream);
> +}
> +
> +struct kunit_stream *kunit_new_stream(struct kunit *test)
> +{
> + struct kunit_resource *res;
> +
> + res = kunit_alloc_resource(test,
> + kunit_stream_init,
> + kunit_stream_free,
> + test);
> +
> + if (res)
> + return res->allocation;
> + else
> + return NULL;
> +}
> diff --git a/kunit/test.c b/kunit/test.c
> index 541f9adb1608c..f7575b127e2df 100644
> --- a/kunit/test.c
> +++ b/kunit/test.c
> @@ -63,12 +63,20 @@ static void kunit_vprintk(const struct kunit *test,
> "kunit %s: %pV", test->name, vaf);
> }
>
> +static void kunit_fail(struct kunit *test, struct kunit_stream *stream)
> +{
> + kunit_set_success(test, false);
> + kunit_stream_set_level(stream, KERN_ERR);
> + kunit_stream_commit(stream);
> +}
> +
> int kunit_init_test(struct kunit *test, const char *name)
> {
> spin_lock_init(&test->lock);
> INIT_LIST_HEAD(&test->resources);
> test->name = name;
> test->vprintk = kunit_vprintk;
> + test->fail = kunit_fail;
>
> return 0;
> }
>
thanks,
-- Shuah
_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um
next prev parent reply other threads:[~2019-05-03 1:50 UTC|newest]
Thread overview: 667+ 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 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
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
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 ` Brendan Higgins
2019-05-03 4:37 ` brendanhiggins
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 ` Greg KH
2019-05-02 11:00 ` gregkh
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 ` Brendan Higgins
2019-05-02 20:25 ` brendanhiggins
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 ` Frank Rowand
2019-05-02 21:18 ` Frank Rowand
2019-05-02 21:18 ` frowand.list
2019-05-03 1:50 ` shuah [this message]
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 ` Brendan Higgins
2019-05-03 5:48 ` brendanhiggins
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 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: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: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-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 ` Greg KH
2019-05-02 10:58 ` gregkh
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 ` Brendan Higgins
2019-05-02 20:30 ` brendanhiggins
2019-05-03 1:27 ` shuah
2019-05-03 1:27 ` shuah
2019-05-03 1:27 ` shuah
2019-05-03 1:27 ` shuah
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 ` Brendan Higgins
2019-05-03 5:18 ` brendanhiggins
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
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 ` Logan Gunthorpe
2019-05-03 3:14 ` logang
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 ` Brendan Higgins
2019-05-03 6:48 ` brendanhiggins
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 ` Logan Gunthorpe
2019-05-03 12:33 ` logang
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 ` Brendan Higgins
2019-05-06 8:48 ` brendanhiggins
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 ` Brendan Higgins
2019-05-06 9:03 ` brendanhiggins
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 ` Greg KH
2019-05-02 11:02 ` gregkh
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 ` Brendan Higgins
2019-05-02 18:07 ` brendanhiggins
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 ` Frank Rowand
2019-05-02 21:16 ` frowand.list
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 ` Brendan Higgins
2019-05-02 23:45 ` brendanhiggins
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 ` Frank Rowand
2019-05-03 1:45 ` frowand.list
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 ` Brendan Higgins
2019-05-03 5:36 ` brendanhiggins
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 ` Frank Rowand
2019-05-03 18:59 ` frowand.list
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 ` Brendan Higgins
2019-05-03 23:14 ` brendanhiggins
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 ` Greg KH
2019-05-04 10:42 ` gregkh
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 ` Frank Rowand
2019-05-06 0:19 ` frowand.list
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 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:39 ` 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-07 19:13 ` Tim.Bird
2019-05-07 19:13 ` Tim.Bird
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-03 6:41 ` Greg KH
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-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 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
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 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
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 ` Randy Dunlap
2019-05-09 5:08 ` rdunlap
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-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 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
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 ` Brendan Higgins
2019-05-06 9:18 ` brendanhiggins
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 ` Brendan Higgins
2019-05-01 23:01 ` brendanhiggins
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 ` Greg KH
2019-05-02 11:03 ` gregkh
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 ` Brendan Higgins
2019-05-02 18:45 ` brendanhiggins
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 ` Greg KH
2019-05-03 6:42 ` gregkh
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 ` Brendan Higgins
2019-05-03 23:41 ` brendanhiggins
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 ` Greg KH
2019-05-04 10:40 ` gregkh
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 ` Greg KH
2019-05-02 10:50 ` gregkh
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 ` Greg KH
2019-05-02 11:05 ` gregkh
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 ` Brendan Higgins
2019-05-03 0:41 ` brendanhiggins
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 ` Brendan Higgins
2019-05-03 0:44 ` brendanhiggins
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 ` Logan Gunthorpe
2019-05-03 3:18 ` logang
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
2019-05-07 8:01 ` Greg KH
2019-05-07 8:01 ` Greg KH
2019-05-07 8:01 ` Greg KH
2019-05-07 8:01 ` gregkh
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 ` Frank Rowand
2019-05-09 1:01 ` Frank Rowand
2019-05-09 1:01 ` frowand.list
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 ` Theodore Ts'o
2019-05-07 17:22 ` Theodore Ts'o
2019-05-07 17:22 ` tytso
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-09 0:58 ` Frank Rowand
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 ` Frank Rowand
2019-05-09 0:58 ` frowand.list
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 ` Theodore Ts'o
2019-05-09 1:44 ` Theodore Ts'o
2019-05-09 1:44 ` tytso
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 ` Frank Rowand
2019-05-09 2:18 ` Frank Rowand
2019-05-09 2:18 ` frowand.list
2019-05-14 8:22 ` Brendan Higgins
2019-05-14 8:22 ` Brendan Higgins
2019-05-14 8:22 ` Brendan Higgins
2019-05-14 8:22 ` brendanhiggins
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 ` Frank Rowand
2019-05-09 0:43 ` Frank Rowand
2019-05-09 0:43 ` frowand.list
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 ` Theodore Ts'o
2019-05-09 1:58 ` Theodore Ts'o
2019-05-09 1:58 ` tytso
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 ` Frank Rowand
2019-05-09 2:13 ` Frank Rowand
2019-05-09 2:13 ` frowand.list
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 ` Theodore Ts'o
2019-05-09 3:20 ` Theodore Ts'o
2019-05-09 3:20 ` tytso
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 ` Theodore Ts'o
2019-05-09 13:35 ` Theodore Ts'o
2019-05-09 13:35 ` tytso
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 14:48 ` knut.omang
2019-05-09 17:00 ` Tim.Bird
2019-05-09 17:00 ` Tim.Bird
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: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 18:12 ` Frank Rowand
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 ` Frank Rowand
2019-05-09 18:12 ` frowand.list
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 ` Theodore Ts'o
2019-05-09 21:42 ` Theodore Ts'o
2019-05-09 21:42 ` tytso
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 ` Logan Gunthorpe
2019-05-09 22:20 ` Logan Gunthorpe
2019-05-09 22:20 ` logang
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 ` Theodore Ts'o
2019-05-09 23:30 ` Theodore Ts'o
2019-05-09 23:30 ` tytso
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 ` Logan Gunthorpe
2019-05-09 23:40 ` Logan Gunthorpe
2019-05-09 23:40 ` logang
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 ` Theodore Ts'o
2019-05-10 4:47 ` Theodore Ts'o
2019-05-10 4:47 ` tytso
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 ` Frank Rowand
2019-05-10 5:18 ` Frank Rowand
2019-05-10 5:18 ` frowand.list
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 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 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 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-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-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-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-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-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 ` Logan Gunthorpe
2019-05-10 16:17 ` logang
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 ` Frank Rowand
2019-05-10 22:13 ` Frank Rowand
2019-05-10 22:13 ` frowand.list
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 ` Brendan Higgins
2019-05-14 8:38 ` brendanhiggins
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 ` Frank Rowand
2019-05-15 0:14 ` frowand.list
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 ` Logan Gunthorpe
2019-05-15 0:26 ` Logan Gunthorpe
2019-05-15 0:26 ` logang
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 ` Frank Rowand
2019-05-10 21:52 ` Frank Rowand
2019-05-10 21:52 ` frowand.list
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 ` Brendan Higgins
2019-05-14 20:54 ` brendanhiggins
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 ` Frank Rowand
2019-05-10 21:12 ` Frank Rowand
2019-05-10 21:12 ` frowand.list
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 ` Theodore Ts'o
2019-05-11 17:33 ` Theodore Ts'o
2019-05-11 17:33 ` tytso
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 Vetter
2019-05-13 14:44 ` daniel
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 ` Brendan Higgins
2019-05-14 6:04 ` brendanhiggins
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 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-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 Vetter
2019-05-15 7:41 ` daniel
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-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 Vetter
2019-05-23 8:40 ` daniel
[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 ` Frank Rowand
2019-05-15 0:26 ` frowand.list
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 ` Theodore Ts'o
2019-05-15 4:28 ` Theodore Ts'o
2019-05-15 4:28 ` tytso
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 ` Frank Rowand
2019-05-10 5:11 ` Frank Rowand
2019-05-10 5:11 ` frowand.list
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 ` Theodore Ts'o
2019-05-10 10:43 ` Theodore Ts'o
2019-05-10 10:43 ` tytso
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 ` Frank Rowand
2019-05-10 21:05 ` Frank Rowand
2019-05-10 21:05 ` frowand.list
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-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
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=ead23600-eecd-cf74-bdd1-94a6964e29b2@kernel.org \
--to=shuah@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=dan.j.williams@intel.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=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=pmladek@suse.com \
--cc=richard@nod.at \
--cc=rientjes@google.com \
--cc=robh@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sboyd@kernel.org \
--cc=wfg@linux.intel.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.