Patch "dma-remap: use kvmalloc_array/kvfree for larger dma memory remap" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    dma-remap: use kvmalloc_array/kvfree for larger dma memory remap

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     dma-remap-use-kvmalloc_array-kvfree-for-larger-dma-m.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit a5710a956eb91e6a3c0626af8b961cc518576b81
Author: gaoxu <gaoxu2@xxxxxxxxxxx>
Date:   Tue Jun 6 12:47:37 2023 +0000

    dma-remap: use kvmalloc_array/kvfree for larger dma memory remap
    
    [ Upstream commit 51ff97d54f02b4444dfc42e380ac4c058e12d5dd ]
    
    If dma_direct_alloc() alloc memory in size of 64MB, the inner function
    dma_common_contiguous_remap() will allocate 128KB memory by invoking
    the function kmalloc_array(). and the kmalloc_array seems to fail to try to
    allocate 128KB mem.
    
    Call trace:
    [14977.928623] qcrosvm: page allocation failure: order:5, mode:0x40cc0
    [14977.928638] dump_backtrace.cfi_jt+0x0/0x8
    [14977.928647] dump_stack_lvl+0x80/0xb8
    [14977.928652] warn_alloc+0x164/0x200
    [14977.928657] __alloc_pages_slowpath+0x9f0/0xb4c
    [14977.928660] __alloc_pages+0x21c/0x39c
    [14977.928662] kmalloc_order+0x48/0x108
    [14977.928666] kmalloc_order_trace+0x34/0x154
    [14977.928668] __kmalloc+0x548/0x7e4
    [14977.928673] dma_direct_alloc+0x11c/0x4f8
    [14977.928678] dma_alloc_attrs+0xf4/0x138
    [14977.928680] gh_vm_ioctl_set_fw_name+0x3c4/0x610 [gunyah]
    [14977.928698] gh_vm_ioctl+0x90/0x14c [gunyah]
    [14977.928705] __arm64_sys_ioctl+0x184/0x210
    
    work around by doing kvmalloc_array instead.
    
    Signed-off-by: Gao Xu <gaoxu2@xxxxxxxxxxx>
    Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
    Signed-off-by: Christoph Hellwig <hch@xxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/dma/remap.c b/kernel/dma/remap.c
index b4526668072e7..27596f3b4aef3 100644
--- a/kernel/dma/remap.c
+++ b/kernel/dma/remap.c
@@ -43,13 +43,13 @@ void *dma_common_contiguous_remap(struct page *page, size_t size,
 	void *vaddr;
 	int i;
 
-	pages = kmalloc_array(count, sizeof(struct page *), GFP_KERNEL);
+	pages = kvmalloc_array(count, sizeof(struct page *), GFP_KERNEL);
 	if (!pages)
 		return NULL;
 	for (i = 0; i < count; i++)
 		pages[i] = nth_page(page, i);
 	vaddr = vmap(pages, count, VM_DMA_COHERENT, prot);
-	kfree(pages);
+	kvfree(pages);
 
 	return vaddr;
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux