• Peng Fan's avatar
    drivers: base: dma-mapping: page align the size when unmap_kernel_range · 9ae3f9e1
    Peng Fan authored
    commit 85714108e673cdebf1b96abfd50fb02a29e37577 upstream.
    
    When dma_common_free_remap, the input parameter 'size' may not
    be page aligned. And, met kernel warning when doing iommu dma
    for usb on i.MX8 platform:
    "
    WARNING: CPU: 0 PID: 869 at mm/vmalloc.c:70 vunmap_page_range+0x1cc/0x1d0()
    Modules linked in:
    CPU: 0 PID: 869 Comm: kworker/u8:2 Not tainted 4.1.12-00444-gc5f9d1d-dirty #147
    Hardware name: Freescale i.MX8DV Sabreauto (DT)
    Workqueue: ci_otg ci_otg_work
    Call trace:
    [<ffffffc000089920>] dump_backtrace+0x0/0x124
    [<ffffffc000089a54>] show_stack+0x10/0x1c
    [<ffffffc0006d1e6c>] dump_stack+0x84/0xc8
    [<ffffffc0000b4568>] warn_slowpath_common+0x98/0xd0
    [<ffffffc0000b4664>] warn_slowpath_null+0x14/0x20
    [<ffffffc000170348>] vunmap_page_range+0x1c8/0x1d0
    [<ffffffc000170388>] unmap_kernel_range+0x20/0x88
    [<ffffffc000460ad0>] dma_common_free_remap+0x74/0x84
    [<ffffffc0000940d8>] __iommu_free_attrs+0x9c/0x178
    [<ffffffc0005032bc>] ehci_mem_cleanup+0x140/0x194
    [<ffffffc000503548>] ehci_stop+0x8c/0xdc
    [<ffffffc0004e8258>] usb_remove_hcd+0xf0/0x1cc
    [<ffffffc000516bc0>] host_stop+0x1c/0x58
    [<ffffffc000514240>] ci_otg_work+0xdc/0x120
    [<ffffffc0000c9c34>] process_one_work+0x134/0x33c
    [<ffffffc0000c9f78>] worker_thread+0x13c/0x47c
    [<ffffffc0000cf43c>] kthread+0xd8/0xf0
    "
    
    For dma_common_pages_remap:
    dma_common_pages_remap
       |->get_vm_area_caller
            |->__get_vm_area_node
                |->size = PAGE_ALIGN(size);   Round up to page aligned
    
    So, in dma_common_free_remap, we also need a page aligned size,
    pass 'PAGE_ALIGN(size)' to unmap_kernel_range.
    Signed-off-by: 's avatarPeng Fan <van.freenix@gmail.com>
    Signed-off-by: 's avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    9ae3f9e1
Name
Last commit
Last update
..
power Loading commit data...
regmap Loading commit data...
Kconfig Loading commit data...
Makefile Loading commit data...
attribute_container.c Loading commit data...
base.h Loading commit data...
bus.c Loading commit data...
cacheinfo.c Loading commit data...
class.c Loading commit data...
component.c Loading commit data...
container.c Loading commit data...
core.c Loading commit data...
cpu.c Loading commit data...
dd.c Loading commit data...
devcoredump.c Loading commit data...
devres.c Loading commit data...
devtmpfs.c Loading commit data...
dma-coherent.c Loading commit data...
dma-contiguous.c Loading commit data...
dma-mapping.c Loading commit data...
driver.c Loading commit data...
firmware.c Loading commit data...
firmware_class.c Loading commit data...
hypervisor.c Loading commit data...
init.c Loading commit data...
isa.c Loading commit data...
map.c Loading commit data...
memory.c Loading commit data...
module.c Loading commit data...
node.c Loading commit data...
pinctrl.c Loading commit data...
platform-msi.c Loading commit data...
platform.c Loading commit data...
property.c Loading commit data...
soc.c Loading commit data...
syscore.c Loading commit data...
topology.c Loading commit data...
transport_class.c Loading commit data...