• Marek Szyprowski's avatar
    drm: xen: fix common struct sg_table related issues · 5e0ff16b
    Marek Szyprowski authored
    The Documentation/DMA-API-HOWTO.txt states that the dma_map_sg() function
    returns the number of the created entries in the DMA address space.
    However the subsequent calls to the dma_sync_sg_for_{device,cpu}() and
    dma_unmap_sg must be called with the original number of the entries
    passed to the dma_map_sg().
    
    struct sg_table is a common structure used for describing a non-contiguous
    memory buffer, used commonly in the DRM and graphics subsystems. It
    consists of a scatterlist with memory pages and DMA addresses (sgl entry),
    as well as the number of scatterlist entries: CPU pages (orig_nents entry)
    and DMA mapped pages (nents entry).
    
    It turned out that it was a common mistake to misuse nents and orig_nents
    entries, calling DMA-mapping functions with a wrong number of entries or
    ignoring the number of mapped entries returned by the dma_map_sg()
    function.
    
    Fix the code to refer to proper nents or orig_nents entries. This driver
    reports the number of the pages in the imported scatterlist, so it should
    refer to sg_table->orig_nents entry.
    Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: default avatarOleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
    5e0ff16b
xen_drm_front_gem.c 7.28 KB