[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 01/21] drm/amdgpu: Introduce GEM object functions
 
- To: Thomas Zimmermann <tzimmermann@xxxxxxx>, alexander.deucher@xxxxxxx, airlied@xxxxxxxx, daniel@xxxxxxxx, linux@xxxxxxxxxxxxxxx, maarten.lankhorst@xxxxxxxxxxxxxxx, mripard@xxxxxxxxxx, l.stach@xxxxxxxxxxxxxx, christian.gmeiner@xxxxxxxxx, inki.dae@xxxxxxxxxxx, jy0922.shim@xxxxxxxxxxx, sw0312.kim@xxxxxxxxxxx, kyungmin.park@xxxxxxxxxxx, kgene@xxxxxxxxxx, krzk@xxxxxxxxxx, patrik.r.jakobsson@xxxxxxxxx, jani.nikula@xxxxxxxxxxxxxxx, joonas.lahtinen@xxxxxxxxxxxxxxx, rodrigo.vivi@xxxxxxxxx, chunkuang.hu@xxxxxxxxxx, p.zabel@xxxxxxxxxxxxxx, matthias.bgg@xxxxxxxxx, robdclark@xxxxxxxxx, sean@xxxxxxxxxx, bskeggs@xxxxxxxxxx, tomi.valkeinen@xxxxxx, eric@xxxxxxxxxx, hjc@xxxxxxxxxxxxxx, heiko@xxxxxxxxx, thierry.reding@xxxxxxxxx, jonathanh@xxxxxxxxxx, rodrigosiqueiramelo@xxxxxxxxx, hamohammed.sa@xxxxxxxxx, oleksandr_andrushchenko@xxxxxxxx, hyun.kwon@xxxxxxxxxx, laurent.pinchart@xxxxxxxxxxxxxxxx, michal.simek@xxxxxxxxxx, sumit.semwal@xxxxxxxxxx, evan.quan@xxxxxxx, Hawking.Zhang@xxxxxxx, tianci.yin@xxxxxxx, marek.olsak@xxxxxxx, hdegoede@xxxxxxxxxx, andrey.grodzovsky@xxxxxxx, Felix.Kuehling@xxxxxxx, xinhui.pan@xxxxxxx, aaron.liu@xxxxxxx, nirmoy.das@xxxxxxx, chris@xxxxxxxxxxxxxxxxxx, matthew.auld@xxxxxxxxx, tvrtko.ursulin@xxxxxxxxxxxxxxx, andi.shyti@xxxxxxxxx, sam@xxxxxxxxxxxx, miaoqinglang@xxxxxxxxxx, emil.velikov@xxxxxxxxxxxxx
 
- From: Christian König <christian.koenig@xxxxxxx>
 
- Date: Tue, 15 Sep 2020 17:05:16 +0200
 
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none
 
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;  s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iH6uLUSOGlskccVBIX+AS4mkIM1KgY3H2c/OM9SZuao=; b=L9I7u/OiqMoUsZifvVRwnr2UI6HgYwzd1k+kkX17C6QcWgSYvaK0wfe49k+GIJt3irVTwbj/sRNY6jW88dlHZQdLAl/xCysEweFOVNQyUp6dlYAXr4ChUUlbN6hq6TtX1wdU15pA4P/c3F1V6LlLm7Ru6A11j1aEF4A+CXw4TkiHzgz0k8MqHZqhdciwnNgngLTDZVgrMZkU/6lkS59v/UnybhRx7D5aG/RKuVf6JpAYMMUfI82PvwN/stRF6HZJYMJ2MuqVUKaYMzKjuDuKA1zqRtUOlrHxEvg2rrxKNVTiMa6FoLUEzEKXiier/pd6Il/ykPbC/SDnl7wmOKrLwA==
 
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S+uURhelGsy+bQucw/1ZAZ8eP0eI+QDiaPC113yDUdf+X3gMJFFw2YoUUz+AuOv19mqilDhBVkNqFAdKwF4hPzKwFKevGcZO9KufDD40bVnmd9ysZO8+M7zv9by3XVzyVTWJCiUonBNhdiNqprA4nodI7q9BmBfiq0Aj5EXAmgRgyoFcFtzYgiHs0PZpbqGhno3ML+lP2VPGN87eFUtDzq/ekTr31vqfPTpnXOGzIJ6lTMnGviyURDMNh7rdwNxTN/mF2VXlOZFyHhwfXO8XhHFSbpEjHGdd2yGYXPQiPnbR7avCx8nFtUwt9yI+oQWhXzbhs7H4/1ZK4n8ax/garA==
 
- Authentication-results: lists.xenproject.org; dkim=none (message not signed) header.d=none;lists.xenproject.org; dmarc=none action=none header.from=amd.com;
 
- Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx, dri-devel@xxxxxxxxxxxxxxxxxxxxx, etnaviv@xxxxxxxxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, linux-samsung-soc@xxxxxxxxxxxxxxx, intel-gfx@xxxxxxxxxxxxxxxxxxxxx, linux-mediatek@xxxxxxxxxxxxxxxxxxx, linux-arm-msm@xxxxxxxxxxxxxxx, freedreno@xxxxxxxxxxxxxxxxxxxxx, nouveau@xxxxxxxxxxxxxxxxxxxxx, linux-rockchip@xxxxxxxxxxxxxxxxxxx, linux-tegra@xxxxxxxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx
 
- Delivery-date: Tue, 15 Sep 2020 15:05:41 +0000
 
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
 
 
 
Am 15.09.20 um 16:59 schrieb Thomas Zimmermann:
 
GEM object functions deprecate several similar callback interfaces in
struct drm_driver. This patch replaces the per-driver callbacks with
per-instance callbacks in amdgpu. The only exception is gem_prime_mmap,
which is non-trivial to convert.
v2:
        * move object-function instance to amdgpu_gem.c (Christian)
        * set callbacks in amdgpu_gem_object_create() (Christian)
Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    |  6 ------
  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 23 +++++++++++++++++-----
  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h    |  5 -----
  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |  1 +
  4 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 6edde2b9e402..840ca8f9c1e1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -1505,19 +1505,13 @@ static struct drm_driver kms_driver = {
        .lastclose = amdgpu_driver_lastclose_kms,
        .irq_handler = amdgpu_irq_handler,
        .ioctls = amdgpu_ioctls_kms,
-       .gem_free_object_unlocked = amdgpu_gem_object_free,
-       .gem_open_object = amdgpu_gem_object_open,
-       .gem_close_object = amdgpu_gem_object_close,
        .dumb_create = amdgpu_mode_dumb_create,
        .dumb_map_offset = amdgpu_mode_dumb_mmap,
        .fops = &amdgpu_driver_kms_fops,
  
  	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
        .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
-       .gem_prime_export = amdgpu_gem_prime_export,
        .gem_prime_import = amdgpu_gem_prime_import,
-       .gem_prime_vmap = amdgpu_gem_prime_vmap,
-       .gem_prime_vunmap = amdgpu_gem_prime_vunmap,
        .gem_prime_mmap = amdgpu_gem_prime_mmap,
  
  	.name = DRIVER_NAME,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index aa7f230c71bf..aeecd5dc3ce4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -36,9 +36,12 @@
   
  #include "amdgpu.h"
  #include "amdgpu_display.h"
+#include "amdgpu_dma_buf.h"
  #include "amdgpu_xgmi.h"
   
-void amdgpu_gem_object_free(struct drm_gem_object *gobj)
+static const struct drm_gem_object_funcs amdgpu_gem_object_funcs;
+
+static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
  {
        struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
  
@@ -87,6 +90,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
                return r;
        }
        *obj = &bo->tbo.base;
+       (*obj)->funcs = &amdgpu_gem_object_funcs;
  
  	return 0;
  }
@@ -119,8 +123,8 @@ void amdgpu_gem_force_release(struct amdgpu_device *adev)
   * Call from drm_gem_handle_create which appear in both new and open ioctl
   * case.
   */
-int amdgpu_gem_object_open(struct drm_gem_object *obj,
-                          struct drm_file *file_priv)
+static int amdgpu_gem_object_open(struct drm_gem_object *obj,
+                                 struct drm_file *file_priv)
  {
        struct amdgpu_bo *abo = gem_to_amdgpu_bo(obj);
        struct amdgpu_device *adev = amdgpu_ttm_adev(abo->tbo.bdev);
@@ -152,8 +156,8 @@ int amdgpu_gem_object_open(struct drm_gem_object *obj,
        return 0;
  }
  
-void amdgpu_gem_object_close(struct drm_gem_object *obj,
-                            struct drm_file *file_priv)
+static void amdgpu_gem_object_close(struct drm_gem_object *obj,
+                                   struct drm_file *file_priv)
  {
        struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
        struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
@@ -211,6 +215,15 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj,
        ttm_eu_backoff_reservation(&ticket, &list);
  }
  
+static const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
+       .free = amdgpu_gem_object_free,
+       .open = amdgpu_gem_object_open,
+       .close = amdgpu_gem_object_close,
+       .export = amdgpu_gem_prime_export,
+       .vmap = amdgpu_gem_prime_vmap,
+       .vunmap = amdgpu_gem_prime_vunmap,
+};
+
  /*
   * GEM ioctls.
   */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
index e0f025dd1b14..637bf51dbf06 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.h
@@ -33,11 +33,6 @@
  #define AMDGPU_GEM_DOMAIN_MAX         0x3
  #define gem_to_amdgpu_bo(gobj) container_of((gobj), struct amdgpu_bo, 
tbo.base)
   
-void amdgpu_gem_object_free(struct drm_gem_object *obj);
-int amdgpu_gem_object_open(struct drm_gem_object *obj,
-                               struct drm_file *file_priv);
-void amdgpu_gem_object_close(struct drm_gem_object *obj,
-                               struct drm_file *file_priv);
  unsigned long amdgpu_gem_timeout(uint64_t timeout_ns);
   
  /*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index ac043baac05d..c4e82a8fa53f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -561,6 +561,7 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
        bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
        if (bo == NULL)
                return -ENOMEM;
+
 
The newline is not unrelated.
 Apart from that the patch is Reviewed-by: Christian König 
<christian.koenig@xxxxxxx>.
But I think we need some smoke testing of it.
Christian.
 
        drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, size);
        INIT_LIST_HEAD(&bo->shadow_list);
        bo->vm_bo = NULL;
 
 
 
    
     |