Hi
Am 12.06.20 um 03:36 schrieb Gurchetan Singh:
This is useful for the next patch. Also, should we only unmap the amount entries that we mapped with the dma-api?
It looks like you're moving virtio code into shmem. It would be nice to have a cover letter explaining the series.
Signed-off-by: Gurchetan Singh gurchetansingh@chromium.org
drivers/gpu/drm/drm_gem_shmem_helper.c | 16 +++++++++++----- include/drm/drm_gem_shmem_helper.h | 10 ++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index 0a7e3b664bc2..d439074ad7b5 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -124,8 +124,10 @@ void drm_gem_shmem_free_object(struct drm_gem_object *obj) drm_prime_gem_destroy(obj, shmem->sgt); } else { if (shmem->sgt) {
dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
shmem->sgt->nents, DMA_BIDIRECTIONAL);
if (!shmem->skip_dma_api)
dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
shmem->dma_map_count,
}DMA_BIDIRECTIONAL); sg_free_table(shmem->sgt); kfree(shmem->sgt);
@@ -422,8 +424,9 @@ void drm_gem_shmem_purge_locked(struct drm_gem_object *obj)
WARN_ON(!drm_gem_shmem_is_purgeable(shmem));
- dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
shmem->sgt->nents, DMA_BIDIRECTIONAL);
- if (!shmem->skip_dma_api)
dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
sg_free_table(shmem->sgt); kfree(shmem->sgt); shmem->sgt = NULL;shmem->dma_map_count, DMA_BIDIRECTIONAL);
@@ -695,7 +698,10 @@ struct sg_table *drm_gem_shmem_get_pages_sgt(struct drm_gem_object *obj) goto err_put_pages; } /* Map the pages for use by the h/w. */
- dma_map_sg(obj->dev->dev, sgt->sgl, sgt->nents, DMA_BIDIRECTIONAL);
if (!shmem->skip_dma_api)
shmem->dma_map_count = dma_map_sg(obj->dev->dev, sgt->sgl,
sgt->nents,
DMA_BIDIRECTIONAL);
shmem->sgt = sgt;
diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h index 5381f0c8cf6f..2669d87cbfdd 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -101,6 +101,16 @@ struct drm_gem_shmem_object { * @map_cached: map object cached (instead of using writecombine). */ bool map_cached;
- /**
* @skip_dma_api: skip using dma api in certain places.
*/
- bool skip_dma_api;
This looks like an under-documented workaround for something.
- /**
* @skip_dma_api: number of pages mapped by dma-api.
*/
- bool dma_map_count;
The documentation comment doesn't match the field name.
Best regards Thomas
};
#define to_drm_gem_shmem_obj(obj) \