Introduce two more test cases which are specific for RCU freeing of vmalloc pointer. One test case is for object that has rcu_head inside and second one is for headless testing. Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> --- lib/test_vmalloc.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c index 8bbefcaddfe8..1734ba7fc400 100644 --- a/lib/test_vmalloc.c +++ b/lib/test_vmalloc.c @@ -15,6 +15,7 @@ #include <linux/delay.h> #include <linux/rwsem.h> #include <linux/mm.h> +#include <linux/rcupdate.h> #define __param(type, name, init, msg) \ static type name = init; \ @@ -43,6 +44,8 @@ __param(int, run_test_mask, INT_MAX, "\t\tid: 32, name: random_size_align_alloc_test\n" "\t\tid: 64, name: align_shift_alloc_test\n" "\t\tid: 128, name: pcpu_alloc_test\n" + "\t\tid: 256, name: kvfree_rcu_with_head_test\n" + "\t\tid: 512, name: kvfree_rcu_head_less_test\n" /* Add a new test case description here. */ ); @@ -328,6 +331,49 @@ pcpu_alloc_test(void) return rv; } +struct test_kvfree_rcu { + struct rcu_head rcu; + unsigned char array[100]; +}; + +static int +kvfree_rcu_with_head_test(void) +{ + struct test_kvfree_rcu *p; + int i; + + for (i = 0; i < test_loop_count; i++) { + p = vmalloc(1 * PAGE_SIZE); + + if (!p) + return -1; + + p->array[0] = 'a'; + kvfree_rcu(p, rcu); + } + + return 0; +} + +static int +kvfree_rcu_head_less_test(void) +{ + struct test_kvfree_rcu *p; + int i; + + for (i = 0; i < test_loop_count; i++) { + p = vmalloc(1 * PAGE_SIZE); + + if (!p) + return -1; + + p->array[0] = 'a'; + kvfree_rcu(p); + } + + return 0; +} + struct test_case_desc { const char *test_name; int (*test_func)(void); @@ -342,6 +388,8 @@ static struct test_case_desc test_case_array[] = { { "random_size_align_alloc_test", random_size_align_alloc_test }, { "align_shift_alloc_test", align_shift_alloc_test }, { "pcpu_alloc_test", pcpu_alloc_test }, + { "kvfree_rcu_with_head_test", kvfree_rcu_with_head_test }, + { "kvfree_rcu_head_less_test", kvfree_rcu_head_less_test }, /* Add a new test case here. */ }; -- 2.20.1