Re: [PATCH 4/4] drm/amdgpu: use amdgpu_bo_dmabuf for shared prime count

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 3/17/21 9:06 AM, Christian König wrote:
That whole approach won't work :)

The prime_shared_count is on the exported BO and not on the imported one.

So any user BO can be exported.


So any BO from any drm driver is possible. No wonder it worked with amdgpu-amdgpu test machine.

OK scrapping the series :/


Thanks,

Nirmoy



Regards,
Christian.

Am 17.03.21 um 08:47 schrieb Nirmoy Das:
Remove prime_shared_count from base class and use that
the subclass, amdgpu_bo_dmabuf.

Signed-off-by: Nirmoy Das <nirmoy.das@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c      |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 12 ++++++++----
  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c     |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c  |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_object.h  |  1 -
  5 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index b5c766998045..04994757cc9c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -618,7 +618,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
          struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo);
            /* Make sure we use the exclusive slot for shared BOs */
-        if (bo->prime_shared_count)
+        if (is_amdgpu_bo_dmabuf(bo))
              e->tv.num_shared = 0;
          e->bo_va = amdgpu_vm_bo_find(vm, bo);
      }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index e0c4f7c7f1b9..3cf57ea56499 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -143,6 +143,7 @@ static int amdgpu_dma_buf_attach(struct dma_buf *dmabuf,
  {
      struct drm_gem_object *obj = dmabuf->priv;
      struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
+    struct amdgpu_bo_dmabuf *dbo = to_amdgpu_bo_dmabuf(bo);
      struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
      int r;
  @@ -172,7 +173,7 @@ static int amdgpu_dma_buf_attach(struct dma_buf *dmabuf,
      if (r)
          goto out;
  -    bo->prime_shared_count++;
+    dbo->prime_shared_count++;
      amdgpu_bo_unreserve(bo);
      return 0;
  @@ -194,10 +195,11 @@ static void amdgpu_dma_buf_detach(struct dma_buf *dmabuf,
  {
      struct drm_gem_object *obj = dmabuf->priv;
      struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
+    struct amdgpu_bo_dmabuf *dbo = to_amdgpu_bo_dmabuf(bo);
      struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
  -    if (attach->dev->driver != adev->dev->driver && bo->prime_shared_count)
-        bo->prime_shared_count--;
+    if (attach->dev->driver != adev->dev->driver && dbo->prime_shared_count)
+        dbo->prime_shared_count--;
        pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
      pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
@@ -431,6 +433,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
      struct amdgpu_device *adev = drm_to_adev(dev);
      struct drm_gem_object *gobj;
      struct amdgpu_bo *bo;
+    struct amdgpu_bo_dmabuf *dbo;
      uint64_t flags = 0;
      int ret;
  @@ -449,10 +452,11 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
          goto error;
        bo = gem_to_amdgpu_bo(gobj);
+    dbo = to_amdgpu_bo_dmabuf(bo);
      bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
      bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT;
      if (dma_buf->ops != &amdgpu_dmabuf_ops)
-        bo->prime_shared_count = 1;
+        dbo->prime_shared_count = 1;
        dma_resv_unlock(resv);
      return gobj;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 5366a806be2b..7cce8aa29fd7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -783,7 +783,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
          break;
      }
      case AMDGPU_GEM_OP_SET_PLACEMENT:
-        if (robj->prime_shared_count && (args->value & AMDGPU_GEM_DOMAIN_VRAM)) { +        if (is_amdgpu_bo_dmabuf(robj) && (args->value & AMDGPU_GEM_DOMAIN_VRAM)) {
              r = -EINVAL;
              amdgpu_bo_unreserve(robj);
              break;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index ad615eec1e8c..435bf85991e5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -965,7 +965,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
          return -EINVAL;
        /* A shared bo cannot be migrated to VRAM */
-    if (bo->prime_shared_count || bo->tbo.base.import_attach) {
+    if (is_amdgpu_bo_dmabuf(bo) || bo->tbo.base.import_attach) {
          if (domain & AMDGPU_GEM_DOMAIN_GTT)
              domain = AMDGPU_GEM_DOMAIN_GTT;
          else
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index 3d23ad247b1b..2f1abcc4e1e7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -93,7 +93,6 @@ struct amdgpu_bo {
      struct ttm_buffer_object    tbo;
      struct ttm_bo_kmap_obj        kmap;
      u64                flags;
-    unsigned            prime_shared_count;
      /* per VM structure for page tables and with virtual addresses */
      struct amdgpu_vm_bo_base    *vm_bo;
      /* Constant after initialization */

_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux