mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
lib/test_vmalloc: add no_block_alloc_test case
Patch series "__vmalloc()/kvmalloc() and no-block support", v4. This patch (of 10): Introduce a new test case "no_block_alloc_test" that verifies non-blocking allocations using __vmalloc() with GFP_ATOMIC and GFP_NOWAIT flags. It is recommended to build kernel with CONFIG_DEBUG_ATOMIC_SLEEP enabled to help catch "sleeping while atomic" issues. This test ensures that memory allocation logic under atomic constraints does not inadvertently sleep. Link: https://lkml.kernel.org/r/20251007122035.56347-2-urezki@gmail.com Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Cc: Baoquan He <bhe@redhat.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Alexander Potapenko <glider@google.com> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com> Cc: Marco Elver <elver@google.com> Cc: Michal Hocko <mhocko@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
11119b19f6
commit
9ff86ca1cc
|
|
@ -54,6 +54,7 @@ __param(int, run_test_mask, 7,
|
|||
"\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"
|
||||
"\t\tid: 2048, name: no_block_alloc_test\n"
|
||||
/* Add a new test case description here. */
|
||||
);
|
||||
|
||||
|
|
@ -283,6 +284,30 @@ static int fix_size_alloc_test(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int no_block_alloc_test(void)
|
||||
{
|
||||
void *ptr;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < test_loop_count; i++) {
|
||||
bool use_atomic = !!(get_random_u8() % 2);
|
||||
gfp_t gfp = use_atomic ? GFP_ATOMIC : GFP_NOWAIT;
|
||||
unsigned long size = (nr_pages > 0 ? nr_pages : 1) * PAGE_SIZE;
|
||||
|
||||
preempt_disable();
|
||||
ptr = __vmalloc(size, gfp);
|
||||
preempt_enable();
|
||||
|
||||
if (!ptr)
|
||||
return -1;
|
||||
|
||||
*((__u8 *)ptr) = 0;
|
||||
vfree(ptr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
pcpu_alloc_test(void)
|
||||
{
|
||||
|
|
@ -411,6 +436,7 @@ static struct test_case_desc test_case_array[] = {
|
|||
{ "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, },
|
||||
{ "no_block_alloc_test", no_block_alloc_test, true },
|
||||
/* Add a new test case here. */
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user