From bedfec94bb57cf7dc32f03fce463a30d3370bb20 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 2 Oct 2021 17:24:08 +0200 Subject: [PATCH] backend/drm: use drmCloseBufferHandle This has been added in [1] and allows us to close buffer handles without manually calling drmIoctl. [1]: https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/192 --- backend/drm/legacy.c | 8 ++++++-- backend/drm/renderer.c | 4 +++- backend/drm/util.c | 11 ----------- include/backend/drm/util.h | 7 ------- 4 files changed, 9 insertions(+), 21 deletions(-) diff --git a/backend/drm/legacy.c b/backend/drm/legacy.c index cb672023..84e8a914 100644 --- a/backend/drm/legacy.c +++ b/backend/drm/legacy.c @@ -151,9 +151,13 @@ static bool legacy_crtc_commit(struct wlr_drm_connector *conn, int ret = drmModeSetCursor(drm->fd, crtc->id, cursor_handle, cursor_width, cursor_height); - close_bo_handle(drm->fd, cursor_handle); + int set_cursor_errno = errno; + if (drmCloseBufferHandle(drm->fd, cursor_handle) != 0) { + wlr_log_errno(WLR_ERROR, "drmCloseBufferHandle failed"); + } if (ret != 0) { - wlr_drm_conn_log_errno(conn, WLR_DEBUG, "drmModeSetCursor failed"); + wlr_drm_conn_log(conn, WLR_DEBUG, "drmModeSetCursor failed: %s", + strerror(set_cursor_errno)); return false; } diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c index 815ba981..792de938 100644 --- a/backend/drm/renderer.c +++ b/backend/drm/renderer.c @@ -271,7 +271,9 @@ static void close_all_bo_handles(struct wlr_drm_backend *drm, continue; } - close_bo_handle(drm->fd, handles[i]); + if (drmCloseBufferHandle(drm->fd, handles[i]) != 0) { + wlr_log_errno(WLR_ERROR, "drmCloseBufferHandle failed"); + } } } diff --git a/backend/drm/util.c b/backend/drm/util.c index 407c19a5..3cf656fb 100644 --- a/backend/drm/util.c +++ b/backend/drm/util.c @@ -320,14 +320,3 @@ size_t match_obj(size_t num_objs, const uint32_t objs[static restrict num_objs], match_obj_(&st, 0, 0, 0, 0); return st.score; } - -void close_bo_handle(int drm_fd, uint32_t handle) { - if (handle == 0) { - return; - } - - struct drm_gem_close args = { .handle = handle }; - if (drmIoctl(drm_fd, DRM_IOCTL_GEM_CLOSE, &args) != 0) { - wlr_log_errno(WLR_ERROR, "drmIoctl(GEM_CLOSE) failed"); - } -} diff --git a/include/backend/drm/util.h b/include/backend/drm/util.h index 6e97505c..b4cdee7d 100644 --- a/include/backend/drm/util.h +++ b/include/backend/drm/util.h @@ -36,11 +36,4 @@ size_t match_obj(size_t num_objs, const uint32_t objs[static restrict num_objs], size_t num_res, const uint32_t res[static restrict num_res], uint32_t out[static restrict num_res]); -/** - * Close a GEM buffer handle. - * - * TODO: replace with drmCloseBufferHandle. - */ -void close_bo_handle(int drm_fd, uint32_t handle); - #endif