"\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. */
 );
 
        return 0;
 }
 
+static int
+vm_map_ram_test(void)
+{
+       unsigned long nr_allocated;
+       unsigned int map_nr_pages;
+       unsigned char *v_ptr;
+       struct page **pages;
+       int i;
+
+       map_nr_pages = nr_pages > 0 ? nr_pages:1;
+       pages = kmalloc(map_nr_pages * sizeof(struct page), GFP_KERNEL);
+       if (!pages)
+               return -1;
+
+       nr_allocated = alloc_pages_bulk_array(GFP_KERNEL, map_nr_pages, pages);
+       if (nr_allocated != map_nr_pages)
+               goto cleanup;
+
+       /* Run the test loop. */
+       for (i = 0; i < test_loop_count; i++) {
+               v_ptr = vm_map_ram(pages, map_nr_pages, NUMA_NO_NODE);
+               *v_ptr = 'a';
+               vm_unmap_ram(v_ptr, map_nr_pages);
+       }
+
+cleanup:
+       for (i = 0; i < nr_allocated; i++)
+               __free_page(pages[i]);
+
+       kfree(pages);
+
+       /* 0 indicates success. */
+       return nr_allocated != map_nr_pages;
+}
+
 struct test_case_desc {
        const char *test_name;
        int (*test_func)(void);
        { "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. */
 };