]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
kunit: split resource API impl from test.c into new resource.c
authorDaniel Latypov <dlatypov@google.com>
Mon, 28 Mar 2022 17:41:43 +0000 (10:41 -0700)
committerShuah Khan <skhan@linuxfoundation.org>
Mon, 4 Apr 2022 22:23:14 +0000 (16:23 -0600)
We've split out the declarations from include/kunit/test.h into
resource.h.
This patch splits out the definitions as well for consistency.

A side effect of this is git blame won't properly track history by
default, users need to run
$ git blame -L ,1 -C13 lib/kunit/resource.c

Signed-off-by: Daniel Latypov <dlatypov@google.com>
Reviewed-by: David Gow <davidgow@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
lib/kunit/Makefile
lib/kunit/resource.c [new file with mode: 0644]
lib/kunit/test.c

index c49f4ffb6273a84ec29eb9d185c51dd398787348..29aff6562b42f5d82eb8ed526b5a008ab272ea04 100644 (file)
@@ -1,6 +1,7 @@
 obj-$(CONFIG_KUNIT) +=                 kunit.o
 
 kunit-objs +=                          test.o \
+                                       resource.o \
                                        string-stream.o \
                                        assert.o \
                                        try-catch.o \
diff --git a/lib/kunit/resource.c b/lib/kunit/resource.c
new file mode 100644 (file)
index 0000000..8f8057a
--- /dev/null
@@ -0,0 +1,125 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit resource API for test managed resources (allocations, etc.).
+ *
+ * Copyright (C) 2022, Google LLC.
+ * Author: Daniel Latypov <dlatypov@google.com>
+ */
+
+#include <kunit/resource.h>
+#include <kunit/test.h>
+#include <linux/kref.h>
+
+/*
+ * Used for static resources and when a kunit_resource * has been created by
+ * kunit_alloc_resource().  When an init function is supplied, @data is passed
+ * into the init function; otherwise, we simply set the resource data field to
+ * the data value passed in.
+ */
+int kunit_add_resource(struct kunit *test,
+                      kunit_resource_init_t init,
+                      kunit_resource_free_t free,
+                      struct kunit_resource *res,
+                      void *data)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       res->free = free;
+       kref_init(&res->refcount);
+
+       if (init) {
+               ret = init(res, data);
+               if (ret)
+                       return ret;
+       } else {
+               res->data = data;
+       }
+
+       spin_lock_irqsave(&test->lock, flags);
+       list_add_tail(&res->node, &test->resources);
+       /* refcount for list is established by kref_init() */
+       spin_unlock_irqrestore(&test->lock, flags);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(kunit_add_resource);
+
+int kunit_add_named_resource(struct kunit *test,
+                            kunit_resource_init_t init,
+                            kunit_resource_free_t free,
+                            struct kunit_resource *res,
+                            const char *name,
+                            void *data)
+{
+       struct kunit_resource *existing;
+
+       if (!name)
+               return -EINVAL;
+
+       existing = kunit_find_named_resource(test, name);
+       if (existing) {
+               kunit_put_resource(existing);
+               return -EEXIST;
+       }
+
+       res->name = name;
+
+       return kunit_add_resource(test, init, free, res, data);
+}
+EXPORT_SYMBOL_GPL(kunit_add_named_resource);
+
+struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
+                                                   kunit_resource_init_t init,
+                                                   kunit_resource_free_t free,
+                                                   gfp_t internal_gfp,
+                                                   void *data)
+{
+       struct kunit_resource *res;
+       int ret;
+
+       res = kzalloc(sizeof(*res), internal_gfp);
+       if (!res)
+               return NULL;
+
+       ret = kunit_add_resource(test, init, free, res, data);
+       if (!ret) {
+               /*
+                * bump refcount for get; kunit_resource_put() should be called
+                * when done.
+                */
+               kunit_get_resource(res);
+               return res;
+       }
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(kunit_alloc_and_get_resource);
+
+void kunit_remove_resource(struct kunit *test, struct kunit_resource *res)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&test->lock, flags);
+       list_del(&res->node);
+       spin_unlock_irqrestore(&test->lock, flags);
+       kunit_put_resource(res);
+}
+EXPORT_SYMBOL_GPL(kunit_remove_resource);
+
+int kunit_destroy_resource(struct kunit *test, kunit_resource_match_t match,
+                          void *match_data)
+{
+       struct kunit_resource *res = kunit_find_resource(test, match,
+                                                        match_data);
+
+       if (!res)
+               return -ENOENT;
+
+       kunit_remove_resource(test, res);
+
+       /* We have a reference also via _find(); drop it. */
+       kunit_put_resource(res);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_destroy_resource);
index 3bca3bf5c15b19e34f1bc7a622257c0cec89c37e..0f66c13d126ed70bce8b8b779d164a5fbad604a4 100644 (file)
@@ -6,10 +6,10 @@
  * Author: Brendan Higgins <brendanhiggins@google.com>
  */
 
+#include <kunit/resource.h>
 #include <kunit/test.h>
 #include <kunit/test-bug.h>
 #include <linux/kernel.h>
-#include <linux/kref.h>
 #include <linux/moduleparam.h>
 #include <linux/sched/debug.h>
 #include <linux/sched.h>
@@ -592,120 +592,6 @@ void __kunit_test_suites_exit(struct kunit_suite **suites)
 }
 EXPORT_SYMBOL_GPL(__kunit_test_suites_exit);
 
-/*
- * Used for static resources and when a kunit_resource * has been created by
- * kunit_alloc_resource().  When an init function is supplied, @data is passed
- * into the init function; otherwise, we simply set the resource data field to
- * the data value passed in.
- */
-int kunit_add_resource(struct kunit *test,
-                      kunit_resource_init_t init,
-                      kunit_resource_free_t free,
-                      struct kunit_resource *res,
-                      void *data)
-{
-       int ret = 0;
-       unsigned long flags;
-
-       res->free = free;
-       kref_init(&res->refcount);
-
-       if (init) {
-               ret = init(res, data);
-               if (ret)
-                       return ret;
-       } else {
-               res->data = data;
-       }
-
-       spin_lock_irqsave(&test->lock, flags);
-       list_add_tail(&res->node, &test->resources);
-       /* refcount for list is established by kref_init() */
-       spin_unlock_irqrestore(&test->lock, flags);
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(kunit_add_resource);
-
-int kunit_add_named_resource(struct kunit *test,
-                            kunit_resource_init_t init,
-                            kunit_resource_free_t free,
-                            struct kunit_resource *res,
-                            const char *name,
-                            void *data)
-{
-       struct kunit_resource *existing;
-
-       if (!name)
-               return -EINVAL;
-
-       existing = kunit_find_named_resource(test, name);
-       if (existing) {
-               kunit_put_resource(existing);
-               return -EEXIST;
-       }
-
-       res->name = name;
-
-       return kunit_add_resource(test, init, free, res, data);
-}
-EXPORT_SYMBOL_GPL(kunit_add_named_resource);
-
-struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
-                                                   kunit_resource_init_t init,
-                                                   kunit_resource_free_t free,
-                                                   gfp_t internal_gfp,
-                                                   void *data)
-{
-       struct kunit_resource *res;
-       int ret;
-
-       res = kzalloc(sizeof(*res), internal_gfp);
-       if (!res)
-               return NULL;
-
-       ret = kunit_add_resource(test, init, free, res, data);
-       if (!ret) {
-               /*
-                * bump refcount for get; kunit_resource_put() should be called
-                * when done.
-                */
-               kunit_get_resource(res);
-               return res;
-       }
-       return NULL;
-}
-EXPORT_SYMBOL_GPL(kunit_alloc_and_get_resource);
-
-void kunit_remove_resource(struct kunit *test, struct kunit_resource *res)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&test->lock, flags);
-       list_del(&res->node);
-       spin_unlock_irqrestore(&test->lock, flags);
-       kunit_put_resource(res);
-}
-EXPORT_SYMBOL_GPL(kunit_remove_resource);
-
-int kunit_destroy_resource(struct kunit *test, kunit_resource_match_t match,
-                          void *match_data)
-{
-       struct kunit_resource *res = kunit_find_resource(test, match,
-                                                        match_data);
-
-       if (!res)
-               return -ENOENT;
-
-       kunit_remove_resource(test, res);
-
-       /* We have a reference also via _find(); drop it. */
-       kunit_put_resource(res);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(kunit_destroy_resource);
-
 struct kunit_kmalloc_array_params {
        size_t n;
        size_t size;