Re: [PATCH v3 3/7] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends

2020-10-02 Thread Daniel Vetter
On Tue, Sep 29, 2020 at 05:14:33PM +0200, Thomas Zimmermann wrote:
> This patch replaces the vmap/vunmap's use of raw pointers in GEM object
> functions with instances of struct dma_buf_map. GEM backends are
> converted as well.
> 
> For most GEM backends, this simply change the returned type. GEM VRAM
> helpers are also updated to indicate whether the returned framebuffer
> address is in system or I/O memory.
> 
> Signed-off-by: Thomas Zimmermann 
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 14 ++--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h |  4 +-
>  drivers/gpu/drm/ast/ast_cursor.c| 29 +++
>  drivers/gpu/drm/ast/ast_drv.h   |  7 +-
>  drivers/gpu/drm/drm_gem.c   | 22 ++---
>  drivers/gpu/drm/drm_gem_cma_helper.c| 14 ++--
>  drivers/gpu/drm/drm_gem_shmem_helper.c  | 48 ++-
>  drivers/gpu/drm/drm_gem_vram_helper.c   | 90 +++--
>  drivers/gpu/drm/etnaviv/etnaviv_drv.h   |  4 +-
>  drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 11 ++-
>  drivers/gpu/drm/exynos/exynos_drm_gem.c |  6 +-
>  drivers/gpu/drm/exynos/exynos_drm_gem.h |  4 +-
>  drivers/gpu/drm/lima/lima_gem.c |  6 +-
>  drivers/gpu/drm/lima/lima_sched.c   | 11 ++-
>  drivers/gpu/drm/mgag200/mgag200_mode.c  | 12 +--
>  drivers/gpu/drm/nouveau/nouveau_gem.h   |  4 +-
>  drivers/gpu/drm/nouveau/nouveau_prime.c |  9 ++-
>  drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 14 ++--
>  drivers/gpu/drm/qxl/qxl_display.c   | 13 +--
>  drivers/gpu/drm/qxl/qxl_draw.c  | 16 ++--
>  drivers/gpu/drm/qxl/qxl_drv.h   |  8 +-
>  drivers/gpu/drm/qxl/qxl_object.c| 23 +++---
>  drivers/gpu/drm/qxl/qxl_object.h|  2 +-
>  drivers/gpu/drm/qxl/qxl_prime.c | 12 +--
>  drivers/gpu/drm/radeon/radeon_gem.c |  4 +-
>  drivers/gpu/drm/radeon/radeon_prime.c   |  9 ++-
>  drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 22 +++--
>  drivers/gpu/drm/rockchip/rockchip_drm_gem.h |  4 +-
>  drivers/gpu/drm/tiny/cirrus.c   | 10 ++-
>  drivers/gpu/drm/tiny/gm12u320.c | 10 ++-
>  drivers/gpu/drm/udl/udl_modeset.c   |  8 +-
>  drivers/gpu/drm/vboxvideo/vbox_mode.c   | 11 ++-
>  drivers/gpu/drm/vc4/vc4_bo.c|  6 +-
>  drivers/gpu/drm/vc4/vc4_drv.h   |  2 +-
>  drivers/gpu/drm/vgem/vgem_drv.c | 16 ++--
>  drivers/gpu/drm/xen/xen_drm_front_gem.c | 18 +++--
>  drivers/gpu/drm/xen/xen_drm_front_gem.h |  6 +-
>  include/drm/drm_gem.h   |  5 +-
>  include/drm/drm_gem_cma_helper.h|  4 +-
>  include/drm/drm_gem_shmem_helper.h  |  4 +-
>  include/drm/drm_gem_vram_helper.h   |  4 +-
>  41 files changed, 304 insertions(+), 222 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> index 5b465ab774d1..de7d0cfe1b93 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
> @@ -44,13 +44,14 @@
>  /**
>   * amdgpu_gem_prime_vmap - &dma_buf_ops.vmap implementation
>   * @obj: GEM BO
> + * @map: The virtual address of the mapping.
>   *
>   * Sets up an in-kernel virtual mapping of the BO's memory.
>   *
>   * Returns:
> - * The virtual address of the mapping or an error pointer.
> + * 0 on success, or a negative errno code otherwise.
>   */
> -void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
> +int amdgpu_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map 
> *map)
>  {
>   struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>   int ret;
> @@ -58,19 +59,20 @@ void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
>   ret = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages,
> &bo->dma_buf_vmap);
>   if (ret)
> - return ERR_PTR(ret);
> + return ret;
> + ttm_kmap_obj_to_dma_buf_map(&bo->dma_buf_vmap, map);

I guess with the ttm_bo_vmap idea all the ttm changes here will look a bit
different.

>  
> - return bo->dma_buf_vmap.virtual;
> + return 0;
>  }
>  
>  /**
>   * amdgpu_gem_prime_vunmap - &dma_buf_ops.vunmap implementation
>   * @obj: GEM BO
> - * @vaddr: Virtual address (unused)
> + * @map: Virtual address (unused)
>   *
>   * Tears down the in-kernel virtual mapping of the BO's memory.
>   */
> -void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
> +void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map 
> *map)
>  {
>   struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
> index 2c5c84a06bb9..622642793064 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
> @@ -31,8 +31,8 @@ struct drm_gem_object *amdgpu_gem_prime_import(struct 
> drm_device *dev,
>

[PATCH v3 3/7] drm/gem: Use struct dma_buf_map in GEM vmap ops and convert GEM backends

2020-09-29 Thread Thomas Zimmermann
This patch replaces the vmap/vunmap's use of raw pointers in GEM object
functions with instances of struct dma_buf_map. GEM backends are
converted as well.

For most GEM backends, this simply change the returned type. GEM VRAM
helpers are also updated to indicate whether the returned framebuffer
address is in system or I/O memory.

Signed-off-by: Thomas Zimmermann 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 14 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h |  4 +-
 drivers/gpu/drm/ast/ast_cursor.c| 29 +++
 drivers/gpu/drm/ast/ast_drv.h   |  7 +-
 drivers/gpu/drm/drm_gem.c   | 22 ++---
 drivers/gpu/drm/drm_gem_cma_helper.c| 14 ++--
 drivers/gpu/drm/drm_gem_shmem_helper.c  | 48 ++-
 drivers/gpu/drm/drm_gem_vram_helper.c   | 90 +++--
 drivers/gpu/drm/etnaviv/etnaviv_drv.h   |  4 +-
 drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 11 ++-
 drivers/gpu/drm/exynos/exynos_drm_gem.c |  6 +-
 drivers/gpu/drm/exynos/exynos_drm_gem.h |  4 +-
 drivers/gpu/drm/lima/lima_gem.c |  6 +-
 drivers/gpu/drm/lima/lima_sched.c   | 11 ++-
 drivers/gpu/drm/mgag200/mgag200_mode.c  | 12 +--
 drivers/gpu/drm/nouveau/nouveau_gem.h   |  4 +-
 drivers/gpu/drm/nouveau/nouveau_prime.c |  9 ++-
 drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 14 ++--
 drivers/gpu/drm/qxl/qxl_display.c   | 13 +--
 drivers/gpu/drm/qxl/qxl_draw.c  | 16 ++--
 drivers/gpu/drm/qxl/qxl_drv.h   |  8 +-
 drivers/gpu/drm/qxl/qxl_object.c| 23 +++---
 drivers/gpu/drm/qxl/qxl_object.h|  2 +-
 drivers/gpu/drm/qxl/qxl_prime.c | 12 +--
 drivers/gpu/drm/radeon/radeon_gem.c |  4 +-
 drivers/gpu/drm/radeon/radeon_prime.c   |  9 ++-
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 22 +++--
 drivers/gpu/drm/rockchip/rockchip_drm_gem.h |  4 +-
 drivers/gpu/drm/tiny/cirrus.c   | 10 ++-
 drivers/gpu/drm/tiny/gm12u320.c | 10 ++-
 drivers/gpu/drm/udl/udl_modeset.c   |  8 +-
 drivers/gpu/drm/vboxvideo/vbox_mode.c   | 11 ++-
 drivers/gpu/drm/vc4/vc4_bo.c|  6 +-
 drivers/gpu/drm/vc4/vc4_drv.h   |  2 +-
 drivers/gpu/drm/vgem/vgem_drv.c | 16 ++--
 drivers/gpu/drm/xen/xen_drm_front_gem.c | 18 +++--
 drivers/gpu/drm/xen/xen_drm_front_gem.h |  6 +-
 include/drm/drm_gem.h   |  5 +-
 include/drm/drm_gem_cma_helper.h|  4 +-
 include/drm/drm_gem_shmem_helper.h  |  4 +-
 include/drm/drm_gem_vram_helper.h   |  4 +-
 41 files changed, 304 insertions(+), 222 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index 5b465ab774d1..de7d0cfe1b93 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -44,13 +44,14 @@
 /**
  * amdgpu_gem_prime_vmap - &dma_buf_ops.vmap implementation
  * @obj: GEM BO
+ * @map: The virtual address of the mapping.
  *
  * Sets up an in-kernel virtual mapping of the BO's memory.
  *
  * Returns:
- * The virtual address of the mapping or an error pointer.
+ * 0 on success, or a negative errno code otherwise.
  */
-void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
+int amdgpu_gem_prime_vmap(struct drm_gem_object *obj, struct dma_buf_map *map)
 {
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
int ret;
@@ -58,19 +59,20 @@ void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj)
ret = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages,
  &bo->dma_buf_vmap);
if (ret)
-   return ERR_PTR(ret);
+   return ret;
+   ttm_kmap_obj_to_dma_buf_map(&bo->dma_buf_vmap, map);
 
-   return bo->dma_buf_vmap.virtual;
+   return 0;
 }
 
 /**
  * amdgpu_gem_prime_vunmap - &dma_buf_ops.vunmap implementation
  * @obj: GEM BO
- * @vaddr: Virtual address (unused)
+ * @map: Virtual address (unused)
  *
  * Tears down the in-kernel virtual mapping of the BO's memory.
  */
-void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
+void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, struct dma_buf_map 
*map)
 {
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
index 2c5c84a06bb9..622642793064 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.h
@@ -31,8 +31,8 @@ struct drm_gem_object *amdgpu_gem_prime_import(struct 
drm_device *dev,
struct dma_buf *dma_buf);
 bool amdgpu_dmabuf_is_xgmi_accessible(struct amdgpu_device *adev,
  struct amdgpu_bo *bo);
-void *amdgpu_gem_prime_vmap(struct drm_gem_object *obj);
-void amdgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
+int amdgpu_gem_prime_vmap(st