Rely on the fd exit path machinery.

Signed-off-by: Christian Brauner (Amutable) <[email protected]>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c 
b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index 1a77a09b3377..174f1d66d9ad 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -420,7 +420,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
        struct etnaviv_gpu *gpu;
        struct sync_file *sync_file = NULL;
        struct ww_acquire_ctx ticket;
-       int out_fence_fd = -1;
+       const struct fd_slot *out_fence_fd = NULL;
        struct pid *pid = get_pid(task_pid(current));
        void *stream;
        int ret;
@@ -504,9 +504,9 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
        }
 
        if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
-               out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
-               if (out_fence_fd < 0) {
-                       ret = out_fence_fd;
+               out_fence_fd = fd_prepare(O_CLOEXEC);
+               if (IS_ERR(out_fence_fd)) {
+                       ret = PTR_ERR(out_fence_fd);
                        goto err_submit_cmds;
                }
        }
@@ -607,10 +607,10 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
                         */
                        goto err_submit_put;
                }
-               fd_install(out_fence_fd, sync_file->file);
+               fd_stage(out_fence_fd, sync_file->file);
        }
 
-       args->fence_fd = out_fence_fd;
+       args->fence_fd = out_fence_fd ? fd_prepare_fd(out_fence_fd) : -1;
        args->fence = submit->out_fence_id;
 
 err_submit_job:
@@ -623,8 +623,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
        ww_acquire_fini(&ticket);
 
 err_submit_cmds:
-       if (ret && (out_fence_fd >= 0))
-               put_unused_fd(out_fence_fd);
        kvfree(stream);
        kvfree(bos);
        kvfree(relocs);

-- 
2.53.0


Reply via email to