All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brendan Higgins <brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
To: gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org,
	keescook-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	mcgrof-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Cc: brakmo-b10kYP2dOMg@public.gmane.org,
	jdike-OPE4K8JWMJJBDgjK7y7TUQ@public.gmane.org,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org,
	richard-/L3Ra7n9ekc@public.gmane.org,
	knut.omang-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org,
	kieran.bingham-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org,
	joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org,
	khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org,
	Brendan Higgins
	<brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Tim.Bird-7U/KSKJipcs@public.gmane.org,
	linux-um-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org,
	julia.lawall-L2FTfq7BK8M@public.gmane.org,
	kunit-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	daniel-/w4YWyX8dFk@public.gmane.org,
	mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org,
	joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org
Subject: [RFC v3 02/19] kunit: test: add test resource management API
Date: Wed, 28 Nov 2018 11:36:19 -0800	[thread overview]
Message-ID: <20181128193636.254378-3-brendanhiggins@google.com> (raw)
In-Reply-To: <20181128193636.254378-1-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>

Create a common API for test managed resources like memory and test
objects. A lot of times a test will want to set up infrastructure to be
used in test cases; this could be anything from just wanting to allocate
some memory to setting up a driver stack; this defines facilities for
creating "test resources" which are managed by the test infrastructure
and are automatically cleaned up at the conclusion of the test.

Signed-off-by: Brendan Higgins <brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
---
 include/kunit/test.h | 109 +++++++++++++++++++++++++++++++++++++++++++
 kunit/test.c         |  95 +++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index ffe66bb355d63..583840e24ffda 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -12,6 +12,69 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *		else
+ *			return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
 struct kunit;
 
 /**
@@ -104,6 +167,7 @@ struct kunit {
 	const char *name; /* Read only after initialization! */
 	spinlock_t lock; /* Gaurds all mutable test state. */
 	bool success; /* Protected by lock. */
+	struct list_head resources; /* Protected by lock. */
 	void (*vprintk)(const struct kunit *test,
 			const char *level,
 			struct va_format *vaf);
@@ -127,6 +191,51 @@ int kunit_run_tests(struct kunit_module *module);
 		} \
 		late_initcall(module_kunit_init##module)
 
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @context: for the user to pass in arbitrary data.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ */
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context);
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
 void __printf(3, 4) kunit_printk(const char *level,
 				 const struct kunit *test,
 				 const char *fmt, ...);
diff --git a/kunit/test.c b/kunit/test.c
index 26d3d6d260e6c..fb1a786e4c94f 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -66,6 +66,7 @@ static void kunit_vprintk(const struct kunit *test,
 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;
 
@@ -93,6 +94,11 @@ static void kunit_run_case_internal(struct kunit *test,
 	test_case->run_case(test);
 }
 
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
 /*
  * Performs post validations and cleanup after a test case was run.
  * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
@@ -103,6 +109,8 @@ static void kunit_run_case_cleanup(struct kunit *test,
 {
 	if (module->exit)
 		module->exit(test);
+
+	kunit_case_internal_cleanup(test);
 }
 
 /*
@@ -150,6 +158,93 @@ int kunit_run_tests(struct kunit_module *module)
 	return 0;
 }
 
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context)
+{
+	struct kunit_resource *res;
+	unsigned long flags;
+	int ret;
+
+	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock_irqsave(&test->lock, flags);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock_irqrestore(&test->lock, flags);
+
+	return res;
+}
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	list_del(&res->node);
+	kfree(res);
+}
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params;
+	struct kunit_resource *res;
+
+	params.size = size;
+	params.gfp = gfp;
+
+	res = kunit_alloc_resource(test,
+				   kunit_kmalloc_init,
+				   kunit_kmalloc_free,
+				   &params);
+
+	if (res)
+		return res->allocation;
+	else
+		return NULL;
+}
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource, *resource_safe;
+	unsigned long flags;
+
+	spin_lock_irqsave(&test->lock, flags);
+	list_for_each_entry_safe(resource,
+				 resource_safe,
+				 &test->resources,
+				 node) {
+		kunit_free_resource(test, resource);
+	}
+	spin_unlock_irqrestore(&test->lock, flags);
+}
+
 void kunit_printk(const char *level,
 		  const struct kunit *test,
 		  const char *fmt, ...)
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog

WARNING: multiple messages have this Message-ID (diff)
From: Brendan Higgins <brendanhiggins@google.com>
To: gregkh@linuxfoundation.org, keescook@google.com,
	mcgrof@kernel.org, shuah@kernel.org
Cc: joel@jms.id.au, mpe@ellerman.id.au, joe@perches.com,
	brakmo@fb.com, rostedt@goodmis.org, Tim.Bird@sony.com,
	khilman@baylibre.com, julia.lawall@lip6.fr,
	linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com,
	linux-kernel@vger.kernel.org, jdike@addtoit.com, richard@nod.at,
	linux-um@lists.infradead.org, daniel@ffwll.ch,
	dri-devel@lists.freedesktop.org, robh@kernel.org,
	dan.j.williams@intel.com, linux-nvdimm@lists.01.org,
	kieran.bingham@ideasonboard.com, frowand.list@gmail.com,
	knut.omang@oracle.com,
	Brendan Higgins <brendanhiggins@google.com>
Subject: [RFC v3 02/19] kunit: test: add test resource management API
Date: Wed, 28 Nov 2018 11:36:19 -0800	[thread overview]
Message-ID: <20181128193636.254378-3-brendanhiggins@google.com> (raw)
In-Reply-To: <20181128193636.254378-1-brendanhiggins@google.com>

Create a common API for test managed resources like memory and test
objects. A lot of times a test will want to set up infrastructure to be
used in test cases; this could be anything from just wanting to allocate
some memory to setting up a driver stack; this defines facilities for
creating "test resources" which are managed by the test infrastructure
and are automatically cleaned up at the conclusion of the test.

Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
---
 include/kunit/test.h | 109 +++++++++++++++++++++++++++++++++++++++++++
 kunit/test.c         |  95 +++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index ffe66bb355d63..583840e24ffda 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -12,6 +12,69 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *		else
+ *			return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
 struct kunit;
 
 /**
@@ -104,6 +167,7 @@ struct kunit {
 	const char *name; /* Read only after initialization! */
 	spinlock_t lock; /* Gaurds all mutable test state. */
 	bool success; /* Protected by lock. */
+	struct list_head resources; /* Protected by lock. */
 	void (*vprintk)(const struct kunit *test,
 			const char *level,
 			struct va_format *vaf);
@@ -127,6 +191,51 @@ int kunit_run_tests(struct kunit_module *module);
 		} \
 		late_initcall(module_kunit_init##module)
 
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @context: for the user to pass in arbitrary data.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ */
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context);
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
 void __printf(3, 4) kunit_printk(const char *level,
 				 const struct kunit *test,
 				 const char *fmt, ...);
diff --git a/kunit/test.c b/kunit/test.c
index 26d3d6d260e6c..fb1a786e4c94f 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -66,6 +66,7 @@ static void kunit_vprintk(const struct kunit *test,
 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;
 
@@ -93,6 +94,11 @@ static void kunit_run_case_internal(struct kunit *test,
 	test_case->run_case(test);
 }
 
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
 /*
  * Performs post validations and cleanup after a test case was run.
  * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
@@ -103,6 +109,8 @@ static void kunit_run_case_cleanup(struct kunit *test,
 {
 	if (module->exit)
 		module->exit(test);
+
+	kunit_case_internal_cleanup(test);
 }
 
 /*
@@ -150,6 +158,93 @@ int kunit_run_tests(struct kunit_module *module)
 	return 0;
 }
 
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context)
+{
+	struct kunit_resource *res;
+	unsigned long flags;
+	int ret;
+
+	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock_irqsave(&test->lock, flags);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock_irqrestore(&test->lock, flags);
+
+	return res;
+}
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	list_del(&res->node);
+	kfree(res);
+}
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params;
+	struct kunit_resource *res;
+
+	params.size = size;
+	params.gfp = gfp;
+
+	res = kunit_alloc_resource(test,
+				   kunit_kmalloc_init,
+				   kunit_kmalloc_free,
+				   &params);
+
+	if (res)
+		return res->allocation;
+	else
+		return NULL;
+}
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource, *resource_safe;
+	unsigned long flags;
+
+	spin_lock_irqsave(&test->lock, flags);
+	list_for_each_entry_safe(resource,
+				 resource_safe,
+				 &test->resources,
+				 node) {
+		kunit_free_resource(test, resource);
+	}
+	spin_unlock_irqrestore(&test->lock, flags);
+}
+
 void kunit_printk(const char *level,
 		  const struct kunit *test,
 		  const char *fmt, ...)
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


WARNING: multiple messages have this Message-ID (diff)
From: brendanhiggins at google.com (Brendan Higgins)
Subject: [RFC v3 02/19] kunit: test: add test resource management API
Date: Wed, 28 Nov 2018 11:36:19 -0800	[thread overview]
Message-ID: <20181128193636.254378-3-brendanhiggins@google.com> (raw)
In-Reply-To: <20181128193636.254378-1-brendanhiggins@google.com>

Create a common API for test managed resources like memory and test
objects. A lot of times a test will want to set up infrastructure to be
used in test cases; this could be anything from just wanting to allocate
some memory to setting up a driver stack; this defines facilities for
creating "test resources" which are managed by the test infrastructure
and are automatically cleaned up at the conclusion of the test.

Signed-off-by: Brendan Higgins <brendanhiggins at google.com>
---
 include/kunit/test.h | 109 +++++++++++++++++++++++++++++++++++++++++++
 kunit/test.c         |  95 +++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index ffe66bb355d63..583840e24ffda 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -12,6 +12,69 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *		else
+ *			return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
 struct kunit;
 
 /**
@@ -104,6 +167,7 @@ struct kunit {
 	const char *name; /* Read only after initialization! */
 	spinlock_t lock; /* Gaurds all mutable test state. */
 	bool success; /* Protected by lock. */
+	struct list_head resources; /* Protected by lock. */
 	void (*vprintk)(const struct kunit *test,
 			const char *level,
 			struct va_format *vaf);
@@ -127,6 +191,51 @@ int kunit_run_tests(struct kunit_module *module);
 		} \
 		late_initcall(module_kunit_init##module)
 
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @context: for the user to pass in arbitrary data.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ */
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context);
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
 void __printf(3, 4) kunit_printk(const char *level,
 				 const struct kunit *test,
 				 const char *fmt, ...);
diff --git a/kunit/test.c b/kunit/test.c
index 26d3d6d260e6c..fb1a786e4c94f 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -66,6 +66,7 @@ static void kunit_vprintk(const struct kunit *test,
 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;
 
@@ -93,6 +94,11 @@ static void kunit_run_case_internal(struct kunit *test,
 	test_case->run_case(test);
 }
 
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
 /*
  * Performs post validations and cleanup after a test case was run.
  * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
@@ -103,6 +109,8 @@ static void kunit_run_case_cleanup(struct kunit *test,
 {
 	if (module->exit)
 		module->exit(test);
+
+	kunit_case_internal_cleanup(test);
 }
 
 /*
@@ -150,6 +158,93 @@ int kunit_run_tests(struct kunit_module *module)
 	return 0;
 }
 
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context)
+{
+	struct kunit_resource *res;
+	unsigned long flags;
+	int ret;
+
+	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock_irqsave(&test->lock, flags);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock_irqrestore(&test->lock, flags);
+
+	return res;
+}
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	list_del(&res->node);
+	kfree(res);
+}
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params;
+	struct kunit_resource *res;
+
+	params.size = size;
+	params.gfp = gfp;
+
+	res = kunit_alloc_resource(test,
+				   kunit_kmalloc_init,
+				   kunit_kmalloc_free,
+				   &params);
+
+	if (res)
+		return res->allocation;
+	else
+		return NULL;
+}
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource, *resource_safe;
+	unsigned long flags;
+
+	spin_lock_irqsave(&test->lock, flags);
+	list_for_each_entry_safe(resource,
+				 resource_safe,
+				 &test->resources,
+				 node) {
+		kunit_free_resource(test, resource);
+	}
+	spin_unlock_irqrestore(&test->lock, flags);
+}
+
 void kunit_printk(const char *level,
 		  const struct kunit *test,
 		  const char *fmt, ...)
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog

WARNING: multiple messages have this Message-ID (diff)
From: brendanhiggins@google.com (Brendan Higgins)
Subject: [RFC v3 02/19] kunit: test: add test resource management API
Date: Wed, 28 Nov 2018 11:36:19 -0800	[thread overview]
Message-ID: <20181128193636.254378-3-brendanhiggins@google.com> (raw)
Message-ID: <20181128193619.QduzpdlAYDl2j29vIyRLhQdxqpLStBMzbs5LLdJWEh0@z> (raw)
In-Reply-To: <20181128193636.254378-1-brendanhiggins@google.com>

Create a common API for test managed resources like memory and test
objects. A lot of times a test will want to set up infrastructure to be
used in test cases; this could be anything from just wanting to allocate
some memory to setting up a driver stack; this defines facilities for
creating "test resources" which are managed by the test infrastructure
and are automatically cleaned up at the conclusion of the test.

Signed-off-by: Brendan Higgins <brendanhiggins at google.com>
---
 include/kunit/test.h | 109 +++++++++++++++++++++++++++++++++++++++++++
 kunit/test.c         |  95 +++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index ffe66bb355d63..583840e24ffda 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -12,6 +12,69 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *		else
+ *			return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
 struct kunit;
 
 /**
@@ -104,6 +167,7 @@ struct kunit {
 	const char *name; /* Read only after initialization! */
 	spinlock_t lock; /* Gaurds all mutable test state. */
 	bool success; /* Protected by lock. */
+	struct list_head resources; /* Protected by lock. */
 	void (*vprintk)(const struct kunit *test,
 			const char *level,
 			struct va_format *vaf);
@@ -127,6 +191,51 @@ int kunit_run_tests(struct kunit_module *module);
 		} \
 		late_initcall(module_kunit_init##module)
 
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @context: for the user to pass in arbitrary data.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ */
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context);
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
 void __printf(3, 4) kunit_printk(const char *level,
 				 const struct kunit *test,
 				 const char *fmt, ...);
diff --git a/kunit/test.c b/kunit/test.c
index 26d3d6d260e6c..fb1a786e4c94f 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -66,6 +66,7 @@ static void kunit_vprintk(const struct kunit *test,
 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;
 
@@ -93,6 +94,11 @@ static void kunit_run_case_internal(struct kunit *test,
 	test_case->run_case(test);
 }
 
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
 /*
  * Performs post validations and cleanup after a test case was run.
  * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
@@ -103,6 +109,8 @@ static void kunit_run_case_cleanup(struct kunit *test,
 {
 	if (module->exit)
 		module->exit(test);
+
+	kunit_case_internal_cleanup(test);
 }
 
 /*
@@ -150,6 +158,93 @@ int kunit_run_tests(struct kunit_module *module)
 	return 0;
 }
 
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context)
+{
+	struct kunit_resource *res;
+	unsigned long flags;
+	int ret;
+
+	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock_irqsave(&test->lock, flags);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock_irqrestore(&test->lock, flags);
+
+	return res;
+}
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	list_del(&res->node);
+	kfree(res);
+}
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params;
+	struct kunit_resource *res;
+
+	params.size = size;
+	params.gfp = gfp;
+
+	res = kunit_alloc_resource(test,
+				   kunit_kmalloc_init,
+				   kunit_kmalloc_free,
+				   &params);
+
+	if (res)
+		return res->allocation;
+	else
+		return NULL;
+}
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource, *resource_safe;
+	unsigned long flags;
+
+	spin_lock_irqsave(&test->lock, flags);
+	list_for_each_entry_safe(resource,
+				 resource_safe,
+				 &test->resources,
+				 node) {
+		kunit_free_resource(test, resource);
+	}
+	spin_unlock_irqrestore(&test->lock, flags);
+}
+
 void kunit_printk(const char *level,
 		  const struct kunit *test,
 		  const char *fmt, ...)
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog

WARNING: multiple messages have this Message-ID (diff)
From: Brendan Higgins <brendanhiggins@google.com>
To: gregkh@linuxfoundation.org, keescook@google.com,
	mcgrof@kernel.org, shuah@kernel.org
Cc: brakmo@fb.com, jdike@addtoit.com,
	dri-devel@lists.freedesktop.org, linux-kselftest@vger.kernel.org,
	frowand.list@gmail.com, robh@kernel.org,
	linux-nvdimm@lists.01.org, richard@nod.at, knut.omang@oracle.com,
	kieran.bingham@ideasonboard.com, joel@jms.id.au,
	khilman@baylibre.com, Brendan Higgins <brendanhiggins@google.com>,
	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,
	linux-kernel@vger.kernel.org, daniel@ffwll.ch,
	mpe@ellerman.id.au, joe@perches.com
Subject: [RFC v3 02/19] kunit: test: add test resource management API
Date: Wed, 28 Nov 2018 11:36:19 -0800	[thread overview]
Message-ID: <20181128193636.254378-3-brendanhiggins@google.com> (raw)
In-Reply-To: <20181128193636.254378-1-brendanhiggins@google.com>

Create a common API for test managed resources like memory and test
objects. A lot of times a test will want to set up infrastructure to be
used in test cases; this could be anything from just wanting to allocate
some memory to setting up a driver stack; this defines facilities for
creating "test resources" which are managed by the test infrastructure
and are automatically cleaned up at the conclusion of the test.

Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
---
 include/kunit/test.h | 109 +++++++++++++++++++++++++++++++++++++++++++
 kunit/test.c         |  95 +++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index ffe66bb355d63..583840e24ffda 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -12,6 +12,69 @@
 #include <linux/types.h>
 #include <linux/slab.h>
 
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *		else
+ *			return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
 struct kunit;
 
 /**
@@ -104,6 +167,7 @@ struct kunit {
 	const char *name; /* Read only after initialization! */
 	spinlock_t lock; /* Gaurds all mutable test state. */
 	bool success; /* Protected by lock. */
+	struct list_head resources; /* Protected by lock. */
 	void (*vprintk)(const struct kunit *test,
 			const char *level,
 			struct va_format *vaf);
@@ -127,6 +191,51 @@ int kunit_run_tests(struct kunit_module *module);
 		} \
 		late_initcall(module_kunit_init##module)
 
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @context: for the user to pass in arbitrary data.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ */
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context);
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
 void __printf(3, 4) kunit_printk(const char *level,
 				 const struct kunit *test,
 				 const char *fmt, ...);
diff --git a/kunit/test.c b/kunit/test.c
index 26d3d6d260e6c..fb1a786e4c94f 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -66,6 +66,7 @@ static void kunit_vprintk(const struct kunit *test,
 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;
 
@@ -93,6 +94,11 @@ static void kunit_run_case_internal(struct kunit *test,
 	test_case->run_case(test);
 }
 
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
 /*
  * Performs post validations and cleanup after a test case was run.
  * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
@@ -103,6 +109,8 @@ static void kunit_run_case_cleanup(struct kunit *test,
 {
 	if (module->exit)
 		module->exit(test);
+
+	kunit_case_internal_cleanup(test);
 }
 
 /*
@@ -150,6 +158,93 @@ int kunit_run_tests(struct kunit_module *module)
 	return 0;
 }
 
+struct kunit_resource *kunit_alloc_resource(struct kunit *test,
+					    kunit_resource_init_t init,
+					    kunit_resource_free_t free,
+					    void *context)
+{
+	struct kunit_resource *res;
+	unsigned long flags;
+	int ret;
+
+	res = kzalloc(sizeof(*res), GFP_KERNEL);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock_irqsave(&test->lock, flags);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock_irqrestore(&test->lock, flags);
+
+	return res;
+}
+
+void kunit_free_resource(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	list_del(&res->node);
+	kfree(res);
+}
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params;
+	struct kunit_resource *res;
+
+	params.size = size;
+	params.gfp = gfp;
+
+	res = kunit_alloc_resource(test,
+				   kunit_kmalloc_init,
+				   kunit_kmalloc_free,
+				   &params);
+
+	if (res)
+		return res->allocation;
+	else
+		return NULL;
+}
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource, *resource_safe;
+	unsigned long flags;
+
+	spin_lock_irqsave(&test->lock, flags);
+	list_for_each_entry_safe(resource,
+				 resource_safe,
+				 &test->resources,
+				 node) {
+		kunit_free_resource(test, resource);
+	}
+	spin_unlock_irqrestore(&test->lock, flags);
+}
+
 void kunit_printk(const char *level,
 		  const struct kunit *test,
 		  const char *fmt, ...)
-- 
2.20.0.rc0.387.gc7a69e6b6c-goog


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


  parent reply	other threads:[~2018-11-28 19:36 UTC|newest]

Thread overview: 630+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-28 19:36 [RFC v3 00/19] kunit: introduce KUnit, the Linux kernel unit testing framework Brendan Higgins
2018-11-28 19:36 ` Brendan Higgins
2018-11-28 19:36 ` Brendan Higgins
2018-11-28 19:36 ` brendanhiggins
2018-11-28 19:36 ` [RFC v3 01/19] kunit: test: add KUnit test runner core Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` brendanhiggins
2018-11-30  3:14   ` Luis Chamberlain
2018-11-30  3:14     ` Luis Chamberlain
2018-11-30  3:14     ` Luis Chamberlain
2018-11-30  3:14     ` Luis Chamberlain
2018-11-30  3:14     ` mcgrof
2018-11-30  3:14     ` Luis Chamberlain
2018-12-01  1:51     ` Brendan Higgins
2018-12-01  1:51       ` Brendan Higgins
2018-12-01  1:51       ` Brendan Higgins
2018-12-01  1:51       ` brendanhiggins
2018-12-01  1:51       ` Brendan Higgins
2018-12-01  2:57       ` Luis Chamberlain
2018-12-01  2:57         ` Luis Chamberlain
2018-12-01  2:57         ` Luis Chamberlain
2018-12-01  2:57         ` Luis Chamberlain
2018-12-01  2:57         ` mcgrof
2018-12-01  2:57         ` Luis Chamberlain
2018-12-05 13:15     ` Anton Ivanov
2018-12-05 13:15       ` Anton Ivanov
2018-12-05 13:15       ` Anton Ivanov
2018-12-05 13:15       ` Anton Ivanov
2018-12-05 13:15       ` anton.ivanov
2018-12-05 13:15       ` Anton Ivanov
2018-12-05 14:45       ` Arnd Bergmann
2018-12-05 14:45         ` Arnd Bergmann
2018-12-05 14:45         ` Arnd Bergmann
2018-12-05 14:45         ` Arnd Bergmann
2018-12-05 14:45         ` arnd
2018-12-05 14:45         ` Arnd Bergmann
2018-12-05 14:49         ` Anton Ivanov
2018-12-05 14:49           ` Anton Ivanov
2018-12-05 14:49           ` Anton Ivanov
2018-12-05 14:49           ` Anton Ivanov
2018-12-05 14:49           ` anton.ivanov
2018-12-05 14:49           ` Anton Ivanov
2018-11-30  3:28   ` Luis Chamberlain
2018-11-30  3:28     ` Luis Chamberlain
2018-11-30  3:28     ` Luis Chamberlain
2018-11-30  3:28     ` mcgrof
2018-11-30  3:28     ` Luis Chamberlain
     [not found]     ` <20181130032802.GG18410-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-01  2:08       ` Brendan Higgins
2018-12-01  2:08         ` Brendan Higgins
2018-12-01  2:08         ` Brendan Higgins
2018-12-01  2:08         ` brendanhiggins
2018-12-01  2:08         ` Brendan Higgins
2018-12-01  3:10         ` Luis Chamberlain
2018-12-01  3:10           ` Luis Chamberlain
2018-12-01  3:10           ` Luis Chamberlain
2018-12-01  3:10           ` Luis Chamberlain
2018-12-01  3:10           ` mcgrof
2018-12-01  3:10           ` Luis Chamberlain
     [not found]           ` <20181201031049.GL28501-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-03 22:47             ` Brendan Higgins
2018-12-03 22:47               ` Brendan Higgins
2018-12-03 22:47               ` Brendan Higgins
2018-12-03 22:47               ` brendanhiggins
2018-12-03 22:47               ` Brendan Higgins
2018-12-01  3:02   ` Luis Chamberlain
2018-12-01  3:02     ` Luis Chamberlain
2018-12-01  3:02     ` Luis Chamberlain
2018-12-01  3:02     ` mcgrof
2018-12-01  3:02     ` Luis Chamberlain
2018-11-28 19:36 ` [RFC v3 10/19] kunit: test: add test managed resource tests Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` brendanhiggins
     [not found] ` <20181128193636.254378-1-brendanhiggins-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2018-11-28 19:36   ` Brendan Higgins [this message]
2018-11-28 19:36     ` [RFC v3 02/19] kunit: test: add test resource management API Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 03/19] kunit: test: add string_stream a std::stream like string builder Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-30  3:29     ` Luis Chamberlain
2018-11-30  3:29       ` Luis Chamberlain
2018-11-30  3:29       ` Luis Chamberlain
2018-11-30  3:29       ` Luis Chamberlain
2018-11-30  3:29       ` mcgrof
2018-11-30  3:29       ` Luis Chamberlain
2018-12-01  2:14       ` Brendan Higgins
2018-12-01  2:14         ` Brendan Higgins
2018-12-01  2:14         ` Brendan Higgins
2018-12-01  2:14         ` brendanhiggins
2018-12-01  3:12         ` Luis Chamberlain
2018-12-01  3:12           ` Luis Chamberlain
2018-12-01  3:12           ` Luis Chamberlain
2018-12-01  3:12           ` mcgrof
2018-12-01  3:12           ` Luis Chamberlain
2018-12-03 10:55       ` Petr Mladek
2018-12-03 10:55         ` Petr Mladek
2018-12-03 10:55         ` Petr Mladek
2018-12-03 10:55         ` Petr Mladek
2018-12-03 10:55         ` pmladek
2018-12-03 10:55         ` Petr Mladek
2018-12-04  0:35         ` Brendan Higgins
2018-12-04  0:35           ` Brendan Higgins
2018-12-04  0:35           ` Brendan Higgins
2018-12-04  0:35           ` brendanhiggins
2018-11-28 19:36   ` [RFC v3 04/19] kunit: test: add test_stream a std::stream like logger Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 05/19] kunit: test: add the concept of expectations Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 06/19] arch: um: enable running kunit from User Mode Linux Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 21:26     ` Rob Herring
2018-11-28 21:26       ` Rob Herring
2018-11-28 21:26       ` Rob Herring
2018-11-28 21:26       ` Rob Herring
2018-11-28 21:26       ` robh
2018-11-28 21:26       ` Rob Herring
2018-11-30  3:37       ` Luis Chamberlain
2018-11-30  3:37         ` Luis Chamberlain
2018-11-30  3:37         ` Luis Chamberlain
2018-11-30  3:37         ` Luis Chamberlain
2018-11-30  3:37         ` mcgrof
2018-11-30  3:37         ` Luis Chamberlain
2018-11-30 14:05         ` Rob Herring
2018-11-30 14:05           ` Rob Herring
2018-11-30 14:05           ` Rob Herring
2018-11-30 14:05           ` Rob Herring
2018-11-30 14:05           ` robh
2018-11-30 14:05           ` Rob Herring
2018-11-30 18:22           ` Luis Chamberlain
2018-11-30 18:22             ` Luis Chamberlain
2018-11-30 18:22             ` Luis Chamberlain
2018-11-30 18:22             ` Luis Chamberlain
2018-11-30 18:22             ` mcgrof
2018-11-30 18:22             ` Luis Chamberlain
     [not found]             ` <20181130182203.GS18410-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-03 23:22               ` Brendan Higgins
2018-12-03 23:22                 ` Brendan Higgins
2018-12-03 23:22                 ` Brendan Higgins
2018-12-03 23:22                 ` brendanhiggins
2018-12-03 23:22                 ` Brendan Higgins
2018-11-30  3:30     ` Luis Chamberlain
2018-11-30  3:30       ` Luis Chamberlain
2018-11-30  3:30       ` Luis Chamberlain
2018-11-30  3:30       ` Luis Chamberlain
2018-11-30  3:30       ` mcgrof
2018-11-30  3:30       ` Luis Chamberlain
2018-11-28 19:36   ` [RFC v3 07/19] kunit: test: add initial tests Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-30  3:40     ` Luis Chamberlain
2018-11-30  3:40       ` Luis Chamberlain
2018-11-30  3:40       ` Luis Chamberlain
2018-11-30  3:40       ` Luis Chamberlain
2018-11-30  3:40       ` mcgrof
2018-11-30  3:40       ` Luis Chamberlain
2018-12-03 23:26       ` Brendan Higgins
2018-12-03 23:26         ` Brendan Higgins
2018-12-03 23:26         ` Brendan Higgins
2018-12-03 23:26         ` brendanhiggins
2018-12-03 23:43         ` Luis Chamberlain
2018-12-03 23:43           ` Luis Chamberlain
2018-12-03 23:43           ` Luis Chamberlain
2018-12-03 23:43           ` Luis Chamberlain
2018-12-03 23:43           ` mcgrof
2018-12-03 23:43           ` Luis Chamberlain
2018-11-28 19:36   ` [RFC v3 08/19] arch: um: add shim to trap to allow installing a fault catcher for tests Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-30  3:34     ` Luis Chamberlain
2018-11-30  3:34       ` Luis Chamberlain
2018-11-30  3:34       ` Luis Chamberlain
2018-11-30  3:34       ` mcgrof
2018-11-30  3:34       ` Luis Chamberlain
     [not found]       ` <20181130033429.GK18410-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-03 23:34         ` Brendan Higgins
2018-12-03 23:34           ` Brendan Higgins
2018-12-03 23:34           ` Brendan Higgins
2018-12-03 23:34           ` brendanhiggins
2018-12-03 23:34           ` Brendan Higgins
     [not found]           ` <CAFd5g45+MAVaSW8HN9x57Y8Um=TV1Oa=-K8yExPBS-4KjLyciQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-12-03 23:46             ` Luis Chamberlain
2018-12-03 23:46               ` Luis Chamberlain
2018-12-03 23:46               ` Luis Chamberlain
2018-12-03 23:46               ` mcgrof
2018-12-03 23:46               ` Luis Chamberlain
     [not found]               ` <20181203234628.GR28501-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-04  0:44                 ` Brendan Higgins
2018-12-04  0:44                   ` Brendan Higgins
2018-12-04  0:44                   ` Brendan Higgins
2018-12-04  0:44                   ` brendanhiggins
2018-12-04  0:44                   ` Brendan Higgins
2018-11-30  3:41     ` Luis Chamberlain
2018-11-30  3:41       ` Luis Chamberlain
2018-11-30  3:41       ` Luis Chamberlain
2018-11-30  3:41       ` Luis Chamberlain
2018-11-30  3:41       ` mcgrof
2018-11-30  3:41       ` Luis Chamberlain
2018-12-03 23:37       ` Brendan Higgins
2018-12-03 23:37         ` Brendan Higgins
2018-12-03 23:37         ` Brendan Higgins
2018-12-03 23:37         ` brendanhiggins
2018-11-28 19:36   ` [RFC v3 09/19] kunit: test: add the concept of assertions Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 11/19] kunit: add Python libraries for handing KUnit config and kernel Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-29 13:54     ` Kieran Bingham
2018-11-29 13:54       ` Kieran Bingham
2018-11-29 13:54       ` Kieran Bingham
2018-11-29 13:54       ` Kieran Bingham
2018-11-29 13:54       ` kieran.bingham
2018-11-29 13:54       ` Kieran Bingham
     [not found]       ` <841cf4ae-501b-05ae-5863-a51010709b67-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2018-12-03 23:48         ` Brendan Higgins
2018-12-03 23:48           ` Brendan Higgins
2018-12-03 23:48           ` Brendan Higgins
2018-12-03 23:48           ` brendanhiggins
2018-12-03 23:48           ` Brendan Higgins
2018-12-04 20:47           ` Luis Chamberlain
2018-12-04 20:47             ` Luis Chamberlain
2018-12-04 20:47             ` Luis Chamberlain
2018-12-04 20:47             ` Luis Chamberlain
2018-12-04 20:47             ` mcgrof
2018-12-04 20:47             ` Luis Chamberlain
2018-12-06 12:32             ` Kieran Bingham
2018-12-06 12:32               ` Kieran Bingham
2018-12-06 12:32               ` Kieran Bingham
2018-12-06 12:32               ` kieran.bingham
2018-12-06 12:32               ` Kieran Bingham
2018-12-06 15:37               ` Matthew Wilcox
2018-12-06 15:37                 ` Matthew Wilcox
2018-12-06 15:37                 ` Matthew Wilcox
2018-12-06 15:37                 ` Matthew Wilcox
2018-12-06 15:37                 ` willy
2018-12-06 15:37                 ` Matthew Wilcox
2018-12-07 11:30                 ` Kieran Bingham
2018-12-07 11:30                   ` Kieran Bingham
2018-12-07 11:30                   ` Kieran Bingham
2018-12-07 11:30                   ` Kieran Bingham
2018-12-07 11:30                   ` kieran.bingham
2018-12-07 11:30                   ` Kieran Bingham
2018-12-11 14:09                 ` Petr Mladek
2018-12-11 14:09                   ` Petr Mladek
2018-12-11 14:09                   ` Petr Mladek
2018-12-11 14:09                   ` Petr Mladek
2018-12-11 14:09                   ` pmladek
2018-12-11 14:09                   ` Petr Mladek
2018-12-11 14:41                   ` Steven Rostedt
2018-12-11 14:41                     ` Steven Rostedt
2018-12-11 14:41                     ` Steven Rostedt
2018-12-11 14:41                     ` Steven Rostedt
2018-12-11 14:41                     ` rostedt
2018-12-11 14:41                     ` Steven Rostedt
2018-12-11 17:01                     ` Anton Ivanov
2018-12-11 17:01                       ` Anton Ivanov
2018-12-11 17:01                       ` Anton Ivanov
2018-12-11 17:01                       ` Anton Ivanov
2018-12-11 17:01                       ` anton.ivanov
2018-12-11 17:01                       ` Anton Ivanov
2019-02-09  0:40                       ` Brendan Higgins
2019-02-09  0:40                         ` Brendan Higgins
2019-02-09  0:40                         ` Brendan Higgins
2019-02-09  0:40                         ` Brendan Higgins
2019-02-09  0:40                         ` brendanhiggins
2019-02-09  0:40                         ` Brendan Higgins
2018-12-07  1:05               ` Luis Chamberlain
2018-12-07  1:05                 ` Luis Chamberlain
2018-12-07  1:05                 ` Luis Chamberlain
2018-12-07  1:05                 ` Luis Chamberlain
2018-12-07  1:05                 ` mcgrof
2018-12-07  1:05                 ` Luis Chamberlain
2018-12-07 18:35               ` Kent Overstreet
2018-12-07 18:35                 ` Kent Overstreet
2018-12-07 18:35                 ` Kent Overstreet
2018-12-07 18:35                 ` kent.overstreet
2018-11-30  3:44     ` Luis Chamberlain
2018-11-30  3:44       ` Luis Chamberlain
2018-11-30  3:44       ` Luis Chamberlain
2018-11-30  3:44       ` Luis Chamberlain
2018-11-30  3:44       ` mcgrof
2018-11-30  3:44       ` Luis Chamberlain
2018-12-03 23:50       ` Brendan Higgins
2018-12-03 23:50         ` Brendan Higgins
2018-12-03 23:50         ` Brendan Higgins
2018-12-03 23:50         ` brendanhiggins
2018-12-04 20:48         ` Luis Chamberlain
2018-12-04 20:48           ` Luis Chamberlain
2018-12-04 20:48           ` Luis Chamberlain
2018-12-04 20:48           ` Luis Chamberlain
2018-12-04 20:48           ` mcgrof
2018-12-04 20:48           ` Luis Chamberlain
2018-11-28 19:36   ` [RFC v3 12/19] kunit: add KUnit wrapper script and simple output parser Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 13/19] kunit: improve output from python wrapper Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 14/19] Documentation: kunit: add documentation for KUnit Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-29 13:56     ` Kieran Bingham
2018-11-29 13:56       ` Kieran Bingham
2018-11-29 13:56       ` Kieran Bingham
2018-11-29 13:56       ` Kieran Bingham
2018-11-29 13:56       ` kieran.bingham
2018-11-29 13:56       ` Kieran Bingham
2018-11-30  3:45       ` Luis Chamberlain
2018-11-30  3:45         ` Luis Chamberlain
2018-11-30  3:45         ` Luis Chamberlain
2018-11-30  3:45         ` Luis Chamberlain
2018-11-30  3:45         ` mcgrof
2018-11-30  3:45         ` Luis Chamberlain
     [not found]         ` <20181130034525.GP18410-dAjH6bxAqesAS62YNPtMr3dQhYtBYE6JAL8bYrjMMd8@public.gmane.org>
2018-12-03 23:53           ` Brendan Higgins
2018-12-03 23:53             ` Brendan Higgins
2018-12-03 23:53             ` Brendan Higgins
2018-12-03 23:53             ` brendanhiggins
2018-12-03 23:53             ` Brendan Higgins
2018-12-06 12:16             ` Kieran Bingham
2018-12-06 12:16               ` Kieran Bingham
2018-12-06 12:16               ` Kieran Bingham
2018-12-06 12:16               ` kieran.bingham
2018-12-06 12:16               ` Kieran Bingham
2019-02-09  0:56               ` Brendan Higgins
2019-02-09  0:56                 ` Brendan Higgins
2019-02-09  0:56                 ` Brendan Higgins
2019-02-09  0:56                 ` Brendan Higgins
2019-02-09  0:56                 ` brendanhiggins
2019-02-09  0:56                 ` Brendan Higgins
2019-02-11 12:16                 ` Kieran Bingham
2019-02-11 12:16                   ` Kieran Bingham
2019-02-11 12:16                   ` Kieran Bingham
2019-02-11 12:16                   ` kieran.bingham
2019-02-11 12:16                   ` Kieran Bingham
2019-02-12 22:10                   ` Brendan Higgins
2019-02-12 22:10                     ` Brendan Higgins
2019-02-12 22:10                     ` Brendan Higgins
2019-02-12 22:10                     ` Brendan Higgins
2019-02-12 22:10                     ` brendanhiggins
2019-02-12 22:10                     ` Brendan Higgins
2019-02-13 21:55                     ` Kieran Bingham
2019-02-13 21:55                       ` Kieran Bingham
2019-02-13 21:55                       ` Kieran Bingham
2019-02-13 21:55                       ` kieran.bingham
2019-02-13 21:55                       ` Kieran Bingham
2019-02-14  0:17                       ` Brendan Higgins
2019-02-14  0:17                         ` Brendan Higgins
2019-02-14  0:17                         ` Brendan Higgins
2019-02-14  0:17                         ` Brendan Higgins
2019-02-14  0:17                         ` brendanhiggins
2019-02-14  0:17                         ` Brendan Higgins
2019-02-14 17:26                         ` Luis Chamberlain
2019-02-14 17:26                           ` Luis Chamberlain
2019-02-14 17:26                           ` Luis Chamberlain via dri-devel
2019-02-14 17:26                           ` Luis Chamberlain
2019-02-14 17:26                           ` mcgrof
2019-02-14 17:26                           ` Luis Chamberlain
2019-02-14 22:07                           ` Brendan Higgins
2019-02-14 22:07                             ` Brendan Higgins
2019-02-14 22:07                             ` Brendan Higgins
2019-02-14 22:07                             ` Brendan Higgins
2019-02-14 22:07                             ` brendanhiggins
2019-02-14 22:07                             ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 15/19] MAINTAINERS: add entry for KUnit the unit testing framework Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 17/19] of: unittest: migrate tests to run on KUnit Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 20:56     ` Rob Herring
2018-11-28 20:56       ` Rob Herring
2018-11-28 20:56       ` Rob Herring
2018-11-28 20:56       ` Rob Herring
2018-11-30  0:39       ` Randy Dunlap
2018-11-30  0:39         ` Randy Dunlap
2018-11-30  0:39         ` Randy Dunlap
2018-11-30  0:39         ` Randy Dunlap
2018-11-30  0:39         ` rdunlap
     [not found]         ` <18814973-8f0a-4647-a097-fcc3dc0b3cd3-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2018-12-04  0:13           ` Brendan Higgins
2018-12-04  0:13             ` Brendan Higgins
2018-12-04  0:13             ` Brendan Higgins
2018-12-04  0:13             ` brendanhiggins
2018-12-04  0:13             ` Brendan Higgins
2018-12-04 13:40             ` Rob Herring
2018-12-04 13:40               ` Rob Herring
2018-12-04 13:40               ` Rob Herring
2018-12-04 13:40               ` Rob Herring
2018-12-04 13:40               ` robh
2018-12-04 13:40               ` Rob Herring
     [not found]               ` <CAL_JsqL_PivQbrJFEusdKAy-2EQtKL3OHbmyYSK9bzuTOQegqA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-12-05 23:42                 ` Brendan Higgins
2018-12-05 23:42                   ` Brendan Higgins
2018-12-05 23:42                   ` Brendan Higgins
2018-12-05 23:42                   ` brendanhiggins
2018-12-05 23:42                   ` Brendan Higgins
2018-12-07  0:41                   ` Rob Herring
2018-12-07  0:41                     ` Rob Herring
2018-12-07  0:41                     ` Rob Herring
2018-12-07  0:41                     ` Rob Herring
2018-12-07  0:41                     ` robh
2018-12-07  0:41                     ` Rob Herring
2018-12-04  0:08       ` Brendan Higgins
2018-12-04  0:08         ` Brendan Higgins
2018-12-04  0:08         ` Brendan Higgins
2018-12-04  0:08         ` brendanhiggins
2019-02-13  1:44       ` Brendan Higgins
2019-02-13  1:44         ` Brendan Higgins
2019-02-13  1:44         ` Brendan Higgins
2019-02-13  1:44         ` Brendan Higgins
2019-02-13  1:44         ` brendanhiggins
2019-02-13  1:44         ` Brendan Higgins
2019-02-14 20:10         ` Rob Herring
2019-02-14 20:10           ` Rob Herring
2019-02-14 20:10           ` Rob Herring
2019-02-14 20:10           ` Rob Herring
2019-02-14 20:10           ` robh
2019-02-14 20:10           ` Rob Herring
2019-02-14 21:52           ` Brendan Higgins
2019-02-14 21:52             ` Brendan Higgins
2019-02-14 21:52             ` Brendan Higgins
2019-02-14 21:52             ` Brendan Higgins
2019-02-14 21:52             ` brendanhiggins
2019-02-14 21:52             ` Brendan Higgins
2019-02-18 22:56         ` Frank Rowand
2019-02-18 22:56           ` Frank Rowand
2019-02-18 22:56           ` Frank Rowand
2019-02-18 22:56           ` Frank Rowand
2019-02-18 22:56           ` frowand.list
2019-02-18 22:56           ` Frank Rowand
2019-02-28  0:29           ` Brendan Higgins
2019-02-28  0:29             ` Brendan Higgins
2019-02-28  0:29             ` Brendan Higgins
2019-02-28  0:29             ` Brendan Higgins
2019-02-28  0:29             ` brendanhiggins
2019-02-28  0:29             ` Brendan Higgins
2018-12-04 10:56     ` Frank Rowand
2018-12-04 10:56       ` Frank Rowand
2018-12-04 10:56       ` Frank Rowand
2018-12-04 10:56       ` Frank Rowand
2018-12-04 10:56       ` frowand.list
2018-12-04 10:56       ` Frank Rowand
2018-11-28 19:36   ` [RFC v3 18/19] of: unittest: split out a couple of test cases from unittest Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-12-04 10:58     ` Frank Rowand
2018-12-04 10:58       ` Frank Rowand
2018-12-04 10:58       ` Frank Rowand
2018-12-04 10:58       ` Frank Rowand
2018-12-04 10:58       ` frowand.list
2018-12-04 10:58       ` Frank Rowand
2018-12-05 23:54       ` Brendan Higgins
2018-12-05 23:54         ` Brendan Higgins
2018-12-05 23:54         ` Brendan Higgins
2018-12-05 23:54         ` brendanhiggins
2019-02-14 23:57         ` Frank Rowand
2019-02-14 23:57           ` Frank Rowand
2019-02-14 23:57           ` Frank Rowand
2019-02-14 23:57           ` frowand.list
2019-02-14 23:57           ` Frank Rowand
2019-02-15  0:56           ` Brendan Higgins
2019-02-15  0:56             ` Brendan Higgins
2019-02-15  0:56             ` Brendan Higgins
2019-02-15  0:56             ` Brendan Higgins
2019-02-15  0:56             ` brendanhiggins
2019-02-15  0:56             ` Brendan Higgins
2019-02-15  2:05             ` Frank Rowand
2019-02-15  2:05               ` Frank Rowand
2019-02-15  2:05               ` Frank Rowand
2019-02-15  2:05               ` Frank Rowand
2019-02-15  2:05               ` frowand.list
2019-02-15  2:05               ` Frank Rowand
2019-02-15 10:56               ` Brendan Higgins
2019-02-15 10:56                 ` Brendan Higgins
2019-02-15 10:56                 ` Brendan Higgins
2019-02-15 10:56                 ` Brendan Higgins
2019-02-15 10:56                 ` brendanhiggins
2019-02-15 10:56                 ` Brendan Higgins
2019-02-18 22:25                 ` Frank Rowand
2019-02-18 22:25                   ` Frank Rowand
2019-02-18 22:25                   ` Frank Rowand
2019-02-18 22:25                   ` Frank Rowand
2019-02-18 22:25                   ` frowand.list
2019-02-18 22:25                   ` Frank Rowand
2019-02-20 20:44                   ` Frank Rowand
2019-02-20 20:44                     ` Frank Rowand
2019-02-20 20:44                     ` Frank Rowand
2019-02-20 20:44                     ` Frank Rowand
2019-02-20 20:44                     ` frowand.list
2019-02-20 20:44                     ` Frank Rowand
2019-02-20 20:47                     ` Frank Rowand
2019-02-20 20:47                       ` Frank Rowand
2019-02-20 20:47                       ` Frank Rowand
2019-02-20 20:47                       ` Frank Rowand
2019-02-20 20:47                       ` frowand.list
2019-02-20 20:47                       ` Frank Rowand
2019-02-28  3:52                     ` Brendan Higgins
2019-02-28  3:52                       ` Brendan Higgins
2019-02-28  3:52                       ` Brendan Higgins
2019-02-28  3:52                       ` Brendan Higgins
2019-02-28  3:52                       ` brendanhiggins
2019-02-28  3:52                       ` Brendan Higgins
2019-03-22  0:22                       ` Frank Rowand
2019-03-22  0:22                         ` Frank Rowand
2019-03-22  0:22                         ` Frank Rowand
2019-03-22  0:22                         ` Frank Rowand
2019-03-22  0:22                         ` frowand.list
2019-03-22  0:22                         ` Frank Rowand
2019-03-22  1:30                         ` Brendan Higgins
2019-03-22  1:30                           ` Brendan Higgins
2019-03-22  1:30                           ` Brendan Higgins
2019-03-22  1:30                           ` brendanhiggins
2019-03-22  1:30                           ` Brendan Higgins
2019-03-22  1:47                           ` Frank Rowand
2019-03-22  1:47                             ` Frank Rowand
2019-03-22  1:47                             ` Frank Rowand
2019-03-22  1:47                             ` Frank Rowand
2019-03-22  1:47                             ` frowand.list
2019-03-22  1:47                             ` Frank Rowand
2019-03-25 22:15                             ` Brendan Higgins
2019-03-25 22:15                               ` Brendan Higgins
2019-03-25 22:15                               ` Brendan Higgins
2019-03-25 22:15                               ` Brendan Higgins
2019-03-25 22:15                               ` brendanhiggins
2019-03-25 22:15                               ` Brendan Higgins
2019-09-20 16:57                           ` Rob Herring
2019-09-20 16:57                             ` Rob Herring
2019-09-20 16:57                             ` Rob Herring
2019-09-20 16:57                             ` Rob Herring
2019-09-21 23:57                             ` Frank Rowand
2019-09-21 23:57                               ` Frank Rowand
2019-09-21 23:57                               ` Frank Rowand
2019-09-21 23:57                               ` Frank Rowand
2019-03-22  1:34                         ` Frank Rowand
2019-03-22  1:34                           ` Frank Rowand
2019-03-22  1:34                           ` Frank Rowand
2019-03-22  1:34                           ` Frank Rowand
2019-03-22  1:34                           ` frowand.list
2019-03-22  1:34                           ` Frank Rowand
2019-03-25 22:18                           ` Brendan Higgins
2019-03-25 22:18                             ` Brendan Higgins
2019-03-25 22:18                             ` Brendan Higgins
2019-03-25 22:18                             ` Brendan Higgins
2019-03-25 22:18                             ` brendanhiggins
2019-03-25 22:18                             ` Brendan Higgins
2018-11-28 19:36   ` [RFC v3 19/19] of: unittest: split up some super large test cases Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36     ` brendanhiggins
2018-11-28 19:36     ` Brendan Higgins
2018-11-28 19:36 ` [RFC v3 16/19] arch: um: make UML unflatten device tree when testing Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` Brendan Higgins
2018-11-28 19:36   ` brendanhiggins
2018-11-28 21:16   ` Rob Herring
2018-11-28 21:16     ` Rob Herring
2018-11-28 21:16     ` Rob Herring
2018-11-28 21:16     ` robh
2018-11-28 21:16     ` Rob Herring
     [not found]     ` <CAL_JsqK5cG=QzMBFSZ31_-3ujnxqxv=jj3XYajbRLT7yWYZbfw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-12-04  0:00       ` Brendan Higgins
2018-12-04  0:00         ` Brendan Higgins
2018-12-04  0:00         ` Brendan Higgins
2018-12-04  0:00         ` brendanhiggins
2018-12-04  0:00         ` Brendan Higgins
2018-11-30  3:46   ` Luis Chamberlain
2018-11-30  3:46     ` Luis Chamberlain
2018-11-30  3:46     ` Luis Chamberlain
2018-11-30  3:46     ` mcgrof
2018-11-30  3:46     ` Luis Chamberlain
2018-12-04  0:02     ` Brendan Higgins
2018-12-04  0:02       ` Brendan Higgins
2018-12-04  0:02       ` Brendan Higgins
2018-12-04  0:02       ` brendanhiggins
2018-12-04 10:52 ` [RFC v3 00/19] kunit: introduce KUnit, the Linux kernel unit testing framework Frank Rowand
2018-12-04 10:52   ` Frank Rowand
2018-12-04 10:52   ` Frank Rowand
2018-12-04 10:52   ` frowand.list
2018-12-04 10:52   ` Frank Rowand
2018-12-04 11:40 ` Frank Rowand
2018-12-04 11:40   ` Frank Rowand
2018-12-04 11:40   ` Frank Rowand
2018-12-04 11:40   ` frowand.list
2018-12-04 13:49   ` Rob Herring
2018-12-04 13:49     ` Rob Herring
2018-12-04 13:49     ` Rob Herring
2018-12-04 13:49     ` Rob Herring
2018-12-04 13:49     ` robh
2018-12-04 13:49     ` Rob Herring
2018-12-05 23:10     ` Brendan Higgins
2018-12-05 23:10       ` Brendan Higgins
2018-12-05 23:10       ` Brendan Higgins
2018-12-05 23:10       ` brendanhiggins
2018-12-05 23:10       ` Brendan Higgins
2019-03-22  0:27       ` Frank Rowand
2019-03-22  0:27         ` Frank Rowand
2019-03-22  0:27         ` Frank Rowand
2019-03-22  0:27         ` frowand.list
2019-03-22  0:27         ` Frank Rowand
2019-03-25 22:04         ` Brendan Higgins
2019-03-25 22:04           ` Brendan Higgins
2019-03-25 22:04           ` Brendan Higgins
2019-03-25 22:04           ` Brendan Higgins
2019-03-25 22:04           ` brendanhiggins
2019-03-25 22:04           ` Brendan Higgins

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20181128193636.254378-3-brendanhiggins@google.com \
    --to=brendanhiggins-hpiqsd4aklfqt0dzr+alfa@public.gmane.org \
    --cc=Tim.Bird-7U/KSKJipcs@public.gmane.org \
    --cc=brakmo-b10kYP2dOMg@public.gmane.org \
    --cc=daniel-/w4YWyX8dFk@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=jdike-OPE4K8JWMJJBDgjK7y7TUQ@public.gmane.org \
    --cc=joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org \
    --cc=joel-U3u1mxZcP9KHXe+LvDLADg@public.gmane.org \
    --cc=julia.lawall-L2FTfq7BK8M@public.gmane.org \
    --cc=keescook-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=kieran.bingham-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=knut.omang-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
    --cc=kunit-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kselftest-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org \
    --cc=linux-um-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=mcgrof-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org \
    --cc=richard-/L3Ra7n9ekc@public.gmane.org \
    --cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org \
    --cc=shuah-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.