mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
lib/test_vmalloc.c: add vm_map_ram()/vm_unmap_ram() test case
Add vm_map_ram()/vm_unmap_ram() test case to our stress test-suite. [akpm@linux-foundation.org: fix whitespace, per Lorenzo] Link: https://lkml.kernel.org/r/20230330190639.431589-2-urezki@gmail.com Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Reviewed-by: Lorenzo Stoakes <lstoakes@gmail.com> Reviewed-by: Baoquan He <bhe@redhat.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Dave Chinner <david@fromorbit.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sony.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
062eacf57a
commit
869cb29a61
@ -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,41 @@ kvfree_rcu_2_arg_vmalloc_test(void)
|
||||
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);
|
||||
@ -374,6 +410,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. */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user