linux/drivers/gpu/drm/virtio
Marek Szyprowski 75ef337bdb drm: virtio: 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.

To avoid such issues, lets use a common dma-mapping wrappers operating
directly on the struct sg_table objects and use scatterlist page
iterators where possible. This, almost always, hides references to the
nents and orig_nents entries, making the code robust, easier to follow
and copy/paste safe.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
2020-09-10 08:18:35 +02:00
..
Kconfig drm/virtio: switch from ttm to gem shmem helpers 2019-09-04 06:54:11 +02:00
Makefile drm/virtio: switch from ttm to gem shmem helpers 2019-09-04 06:54:11 +02:00
virtgpu_debugfs.c drm: convert .debugfs_init() hook to return void. 2020-03-18 17:53:28 +01:00
virtgpu_display.c drm/virtio: Remove open-coded commit-tail function 2020-07-14 10:47:16 +02:00
virtgpu_drv.c drm/virtio: add drm_driver.release callback. 2020-02-12 10:24:08 +01:00
virtgpu_drv.h drm pull for 5.8-rc1 2020-06-02 15:04:15 -07:00
virtgpu_fence.c drm/virtio: move to_virtio_fence inside virtgpu_fence 2019-12-19 07:13:46 +01:00
virtgpu_gem.c drm-misc-next for v5.9: 2020-06-24 15:45:51 +10:00
virtgpu_ioctl.c drm-misc-next for v5.9: 2020-06-24 15:45:51 +10:00
virtgpu_kms.c drm/virtio: convert to LE accessors 2020-08-05 11:08:41 -04:00
virtgpu_object.c drm: virtio: fix common struct sg_table related issues 2020-09-10 08:18:35 +02:00
virtgpu_plane.c drm/virtio: batch plane updates (pageflip) 2020-02-17 14:50:49 +01:00
virtgpu_prime.c drm/virtio: switch from ttm to gem shmem helpers 2019-09-04 06:54:11 +02:00
virtgpu_trace_points.c drm/virtio: add trace events for commands 2019-05-06 10:52:58 +02:00
virtgpu_trace.h drm/virtio: add trace events for commands 2019-05-06 10:52:58 +02:00
virtgpu_vq.c drm: virtio: fix common struct sg_table related issues 2020-09-10 08:18:35 +02:00