• gaoxu's avatar
    dma-remap: use kvmalloc_array/kvfree for larger dma memory remap · 51ff97d5
    gaoxu authored
    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: default avatarGao Xu <gaoxu2@hihonor.com>
    Reviewed-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    51ff97d5
remap.c 1.58 KB