[PATCH RFC POC 44/50] drm/etnaviv: install the out-fence descriptor when the ioctl returns
From: Christian Brauner
Date: Tue Sep 15 2026 - 08:05:53 EST
Rely on the fd exit path machinery.
Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>
---
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