nouveau: add interface to make buffer objects global
authorDor Askayo <dor.askayo@gmail.com>
Sat, 12 Aug 2023 19:29:30 +0000 (22:29 +0300)
committerKarol Herbst <kherbst@redhat.com>
Thu, 17 Aug 2023 21:09:55 +0000 (21:09 +0000)
This is useful for when GEM handles are exported and may be shared
between multiple buffer objects without going through other libdrm
interfaces.

Signed-off-by: Dor Askayo <dor.askayo@gmail.com>
Reviewed-by: Karol Herbst <git@karolherbst.de>
nouveau/nouveau-symbols.txt
nouveau/nouveau.c
nouveau/nouveau.h

index 598465f..7e9b103 100644 (file)
@@ -1,3 +1,4 @@
+nouveau_bo_make_global
 nouveau_bo_map
 nouveau_bo_name_get
 nouveau_bo_name_ref
index 7b4efde..62914a3 100644 (file)
@@ -711,7 +711,7 @@ nouveau_bo_wrap_locked(struct nouveau_device *dev, uint32_t handle,
 }
 
 static void
-nouveau_bo_make_global(struct nouveau_bo_priv *nvbo)
+nouveau_nvbo_make_global(struct nouveau_bo_priv *nvbo)
 {
        if (!nvbo->head.next) {
                struct nouveau_device_priv *nvdev = nouveau_device(nvbo->base.device);
@@ -722,6 +722,14 @@ nouveau_bo_make_global(struct nouveau_bo_priv *nvbo)
        }
 }
 
+drm_public void
+nouveau_bo_make_global(struct nouveau_bo *bo)
+{
+    struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
+
+    nouveau_nvbo_make_global(nvbo);
+}
+
 drm_public int
 nouveau_bo_wrap(struct nouveau_device *dev, uint32_t handle,
                struct nouveau_bo **pbo)
@@ -780,7 +788,7 @@ nouveau_bo_name_get(struct nouveau_bo *bo, uint32_t *name)
                }
                nvbo->name = *name = req.name;
 
-               nouveau_bo_make_global(nvbo);
+               nouveau_nvbo_make_global(nvbo);
        }
        return 0;
 }
@@ -830,7 +838,7 @@ nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd)
        if (ret)
                return ret;
 
-       nouveau_bo_make_global(nvbo);
+       nouveau_nvbo_make_global(nvbo);
        return 0;
 }
 
index 0c632fe..a5119f9 100644 (file)
@@ -137,6 +137,7 @@ struct nouveau_bo {
 int nouveau_bo_new(struct nouveau_device *, uint32_t flags, uint32_t align,
                   uint64_t size, union nouveau_bo_config *,
                   struct nouveau_bo **);
+void nouveau_bo_make_global(struct nouveau_bo *);
 int nouveau_bo_wrap(struct nouveau_device *, uint32_t handle,
                    struct nouveau_bo **);
 int nouveau_bo_name_ref(struct nouveau_device *v, uint32_t name,