forked from Minki/linux
kunit: introduce kunit_kmalloc_array/kunit_kcalloc() helpers
Add in: * kunit_kmalloc_array() and wire up kunit_kmalloc() to be a special case of it. * kunit_kcalloc() for symmetry with kunit_kzalloc() This should using KUnit more natural by making it more similar to the existing *alloc() APIs. And while we shouldn't necessarily be writing unit tests where overflow should be a concern, it can't hurt to be safe. 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>
This commit is contained in:
parent
8a5124c0f3
commit
7122debb43
@ -576,17 +576,31 @@ static inline int kunit_destroy_named_resource(struct kunit *test,
|
||||
*/
|
||||
void kunit_remove_resource(struct kunit *test, struct kunit_resource *res);
|
||||
|
||||
/**
|
||||
* kunit_kmalloc_array() - Like kmalloc_array() except the allocation is *test managed*.
|
||||
* @test: The test context object.
|
||||
* @n: number of elements.
|
||||
* @size: The size in bytes of the desired memory.
|
||||
* @gfp: flags passed to underlying kmalloc().
|
||||
*
|
||||
* Just like `kmalloc_array(...)`, 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_array(struct kunit *test, size_t n, size_t size, gfp_t flags);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* See kmalloc() and kunit_kmalloc_array() for more information.
|
||||
*/
|
||||
void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
|
||||
static inline void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
|
||||
{
|
||||
return kunit_kmalloc_array(test, 1, size, gfp);
|
||||
}
|
||||
|
||||
/**
|
||||
* kunit_kfree() - Like kfree except for allocations managed by KUnit.
|
||||
@ -601,13 +615,27 @@ void kunit_kfree(struct kunit *test, const void *ptr);
|
||||
* @size: The size in bytes of the desired memory.
|
||||
* @gfp: flags passed to underlying kmalloc().
|
||||
*
|
||||
* See kzalloc() and kunit_kmalloc() for more information.
|
||||
* See kzalloc() and kunit_kmalloc_array() 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* kunit_kcalloc() - Just like kunit_kmalloc_array(), but zeroes the allocation.
|
||||
* @test: The test context object.
|
||||
* @n: number of elements.
|
||||
* @size: The size in bytes of the desired memory.
|
||||
* @gfp: flags passed to underlying kmalloc().
|
||||
*
|
||||
* See kcalloc() and kunit_kmalloc_array() for more information.
|
||||
*/
|
||||
static inline void *kunit_kcalloc(struct kunit *test, size_t n, size_t size, gfp_t flags)
|
||||
{
|
||||
return kunit_kmalloc_array(test, n, size, flags | __GFP_ZERO);
|
||||
}
|
||||
|
||||
void kunit_cleanup(struct kunit *test);
|
||||
|
||||
void __printf(2, 3) kunit_log_append(char *log, const char *fmt, ...);
|
||||
|
@ -572,41 +572,43 @@ int kunit_destroy_resource(struct kunit *test, kunit_resource_match_t match,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_destroy_resource);
|
||||
|
||||
struct kunit_kmalloc_params {
|
||||
struct kunit_kmalloc_array_params {
|
||||
size_t n;
|
||||
size_t size;
|
||||
gfp_t gfp;
|
||||
};
|
||||
|
||||
static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
|
||||
static int kunit_kmalloc_array_init(struct kunit_resource *res, void *context)
|
||||
{
|
||||
struct kunit_kmalloc_params *params = context;
|
||||
struct kunit_kmalloc_array_params *params = context;
|
||||
|
||||
res->data = kmalloc(params->size, params->gfp);
|
||||
res->data = kmalloc_array(params->n, params->size, params->gfp);
|
||||
if (!res->data)
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void kunit_kmalloc_free(struct kunit_resource *res)
|
||||
static void kunit_kmalloc_array_free(struct kunit_resource *res)
|
||||
{
|
||||
kfree(res->data);
|
||||
}
|
||||
|
||||
void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
|
||||
void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp)
|
||||
{
|
||||
struct kunit_kmalloc_params params = {
|
||||
struct kunit_kmalloc_array_params params = {
|
||||
.size = size,
|
||||
.n = n,
|
||||
.gfp = gfp
|
||||
};
|
||||
|
||||
return kunit_alloc_resource(test,
|
||||
kunit_kmalloc_init,
|
||||
kunit_kmalloc_free,
|
||||
kunit_kmalloc_array_init,
|
||||
kunit_kmalloc_array_free,
|
||||
gfp,
|
||||
¶ms);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_kmalloc);
|
||||
EXPORT_SYMBOL_GPL(kunit_kmalloc_array);
|
||||
|
||||
void kunit_kfree(struct kunit *test, const void *ptr)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user