From: Marek Olšák <marek.ol...@amd.com>

Signed-off-by: Marek Olšák <marek.ol...@amd.com>
---
 drivers/gpu/drm/drm_syncobj.c | 33 +++++++++++++++++++--------------
 include/drm/drm_syncobj.h     |  1 +
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 0bb1741..62adc7a 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -386,33 +386,38 @@ static int drm_syncobj_alloc_file(struct drm_syncobj 
*syncobj)
        return 0;
 }
 
-static int drm_syncobj_handle_to_fd(struct drm_file *file_private,
-                                   u32 handle, int *p_fd)
+int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd)
 {
-       struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle);
        int ret;
        int fd;
 
-       if (!syncobj)
-               return -EINVAL;
-
        fd = get_unused_fd_flags(O_CLOEXEC);
-       if (fd < 0) {
-               drm_syncobj_put(syncobj);
+       if (fd < 0)
                return fd;
-       }
 
        if (!syncobj->file) {
                ret = drm_syncobj_alloc_file(syncobj);
-               if (ret)
-                       goto out_put_fd;
+               if (ret) {
+                       put_unused_fd(fd);
+                       return ret;
+               }
        }
        fd_install(fd, syncobj->file);
-       drm_syncobj_put(syncobj);
        *p_fd = fd;
        return 0;
-out_put_fd:
-       put_unused_fd(fd);
+}
+EXPORT_SYMBOL(drm_syncobj_get_fd);
+
+static int drm_syncobj_handle_to_fd(struct drm_file *file_private,
+                                   u32 handle, int *p_fd)
+{
+       struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle);
+       int ret;
+
+       if (!syncobj)
+               return -EINVAL;
+
+       ret = drm_syncobj_get_fd(syncobj, p_fd);
        drm_syncobj_put(syncobj);
        return ret;
 }
diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
index e7f0035..43e2f38 100644
--- a/include/drm/drm_syncobj.h
+++ b/include/drm/drm_syncobj.h
@@ -140,5 +140,6 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, 
uint32_t flags,
                       struct dma_fence *fence);
 int drm_syncobj_get_handle(struct drm_file *file_private,
                           struct drm_syncobj *syncobj, u32 *handle);
+int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
 
 #endif
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to