]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
sched_ext: Use kvzalloc for large exit_dump allocation
authorBreno Leitao <leitao@debian.org>
Tue, 8 Apr 2025 16:50:42 +0000 (09:50 -0700)
committerTejun Heo <tj@kernel.org>
Tue, 8 Apr 2025 17:53:27 +0000 (07:53 -1000)
Replace kzalloc with kvzalloc for the exit_dump buffer allocation, which
can require large contiguous memory depending on the implementation.
This change prevents allocation failures by allowing the system to fall
back to vmalloc when contiguous memory allocation fails.

Since this buffer is only used for debugging purposes, physical memory
contiguity is not required, making vmalloc a suitable alternative.

Cc: stable@vger.kernel.org
Fixes: 07814a9439a3b0 ("sched_ext: Print debug dump after an error exit")
Suggested-by: Rik van Riel <riel@surriel.com>
Signed-off-by: Breno Leitao <leitao@debian.org>
Acked-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index 66bcd40a28ca1dc20494db0777c19dae9138aa43..db9af6a3c04fd734b60b3622aee830e85418b1de 100644 (file)
@@ -4623,7 +4623,7 @@ unlock:
 
 static void free_exit_info(struct scx_exit_info *ei)
 {
-       kfree(ei->dump);
+       kvfree(ei->dump);
        kfree(ei->msg);
        kfree(ei->bt);
        kfree(ei);
@@ -4639,7 +4639,7 @@ static struct scx_exit_info *alloc_exit_info(size_t exit_dump_len)
 
        ei->bt = kcalloc(SCX_EXIT_BT_LEN, sizeof(ei->bt[0]), GFP_KERNEL);
        ei->msg = kzalloc(SCX_EXIT_MSG_LEN, GFP_KERNEL);
-       ei->dump = kzalloc(exit_dump_len, GFP_KERNEL);
+       ei->dump = kvzalloc(exit_dump_len, GFP_KERNEL);
 
        if (!ei->bt || !ei->msg || !ei->dump) {
                free_exit_info(ei);