Quoting Brendan Higgins (2019-02-14 13:37:14) > @@ -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. Nitpick: "pass in arbitrary data to the init function"? Maybe that provides some more clarity. > + * > + * 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. > + */