]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
lib/test_vmalloc.c: add vm_map_ram()/vm_unmap_ram() test case
authorUladzislau Rezki (Sony) <urezki@gmail.com>
Mon, 27 Mar 2023 17:01:26 +0000 (19:01 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 28 Mar 2023 23:25:19 +0000 (16:25 -0700)
Add vm_map_ram()/vm_unmap_ram() test case to our stress test-suite.

Link: https://lkml.kernel.org/r/20230327170126.406044-2-urezki@gmail.com
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sony.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/test_vmalloc.c

index de4ee0d50906215e9469b29229594251a9995dcf..ad490e20617404a90895c52f12415f10153d5ec7 100644 (file)
@@ -53,6 +53,7 @@ __param(int, run_test_mask, INT_MAX,
                "\t\tid: 128,  name: pcpu_alloc_test\n"
                "\t\tid: 256,  name: kvfree_rcu_1_arg_vmalloc_test\n"
                "\t\tid: 512,  name: kvfree_rcu_2_arg_vmalloc_test\n"
+               "\t\tid: 1024, name: vm_map_ram_test\n"
                /* Add a new test case description here. */
 );
 
@@ -358,6 +359,45 @@ kvfree_rcu_2_arg_vmalloc_test(void)
        return 0;
 }
 
+static int
+vm_map_ram_test(void)
+{
+       unsigned int map_nr_pages;
+       unsigned char *v_ptr;
+       unsigned char *p_ptr;
+       struct page **pages;
+       struct page *page;
+       int i;
+
+       map_nr_pages = nr_pages > 0 ? nr_pages:1;
+       pages = kmalloc(map_nr_pages * sizeof(*page), GFP_KERNEL);
+       if (!pages)
+               return -1;
+
+       for (i = 0; i < map_nr_pages; i++) {
+               page = alloc_pages(GFP_KERNEL, 1);
+               if (!page)
+                       return -1;
+
+               pages[i] = page;
+       }
+
+       /* Run the test loop. */
+       for (i = 0; i < test_loop_count; i++) {
+               v_ptr = vm_map_ram(pages, map_nr_pages, -1);
+               *v_ptr = 'a';
+               vm_unmap_ram(v_ptr, map_nr_pages);
+       }
+
+       for (i = 0; i < map_nr_pages; i++) {
+               p_ptr = page_address(pages[i]);
+               free_pages((unsigned long)p_ptr, 1);
+       }
+
+       kfree(pages);
+       return 0;
+}
+
 struct test_case_desc {
        const char *test_name;
        int (*test_func)(void);
@@ -374,6 +414,7 @@ static struct test_case_desc test_case_array[] = {
        { "pcpu_alloc_test", pcpu_alloc_test },
        { "kvfree_rcu_1_arg_vmalloc_test", kvfree_rcu_1_arg_vmalloc_test },
        { "kvfree_rcu_2_arg_vmalloc_test", kvfree_rcu_2_arg_vmalloc_test },
+       { "vm_map_ram_test", vm_map_ram_test },
        /* Add a new test case here. */
 };