mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
drm: xen: fix common struct sg_table related issues
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: Marek Szyprowski <m.szyprowski@samsung.com> Acked-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
This commit is contained in:
parent
c915c2cbaf
commit
5e0ff16b9e
@ -216,7 +216,7 @@ xen_drm_front_gem_import_sg_table(struct drm_device *dev,
|
||||
return ERR_PTR(ret);
|
||||
|
||||
DRM_DEBUG("Imported buffer of size %zu with nents %u\n",
|
||||
size, sgt->nents);
|
||||
size, sgt->orig_nents);
|
||||
|
||||
return &xen_obj->base;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user