• Stephen Boyd's avatar
    dma-debug: Check for drivers mapping invalid addresses in dma_map_single() · 99c65fa7
    Stephen Boyd authored
    I recently debugged a DMA mapping oops where a driver was trying to map
    a buffer returned from request_firmware() with dma_map_single(). Memory
    returned from request_firmware() is mapped into the vmalloc region and
    this isn't a valid region to map with dma_map_single() per the DMA
    documentation's "What memory is DMA'able?" section.
    
    Unfortunately, we don't really check that in the DMA debugging code, so
    enabling DMA debugging doesn't help catch this problem. Let's add a new
    DMA debug function to check for a vmalloc address or an invalid virtual
    address and print a warning if this happens. This makes it a little
    easier to debug these sorts of problems, instead of seeing odd behavior
    or crashes when drivers attempt to map the vmalloc space for DMA.
    
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    99c65fa7
debug.c 46 KB