From cbe1147842c986534a8005e7e7a99845ca18ed56 Mon Sep 17 00:00:00 2001 From: Seung-Woo Kim Date: Wed, 12 Mar 2025 16:33:28 +0900 Subject: [PATCH] Do mode_map_dumb before export dma_buf for created dumb In kernel drm_gem prime helper, mmap() of the dma_buf exported from gem dumb can require creating offset of the dumb with mode_map_dumb ioctl. To support mmap() of exported dma_buf, do mode_map_dumb ioctl for created dumb always. Change-Id: I6829d1b63b9f51d3c58de5ef4663b97e46e65855 Signed-off-by: Seung-Woo Kim --- src/tbm_backend_dumb.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/tbm_backend_dumb.c b/src/tbm_backend_dumb.c index f36162e..173f784 100644 --- a/src/tbm_backend_dumb.c +++ b/src/tbm_backend_dumb.c @@ -648,6 +648,7 @@ tbm_dumb_bufmgr_alloc_bo(hal_tbm_bufmgr *bufmgr, unsigned int size, tbm_dumb_bo *bo_data; unsigned int dumb_flags; struct drm_mode_create_dumb create_dumb_arg = {0, }; + struct drm_mode_map_dumb map_dumb_arg = {0, }; struct drm_gem_close close_arg = {0, }; int dmabuf; @@ -674,6 +675,11 @@ tbm_dumb_bufmgr_alloc_bo(hal_tbm_bufmgr *bufmgr, unsigned int size, return NULL; } + map_dumb_arg.handle = create_dumb_arg.handle; + if (drmIoctl(bufmgr_data->fd, DRM_IOCTL_MODE_MAP_DUMB, &map_dumb_arg)) { + TBM_BACKEND_ERR("fail to DRM_IOCTL_MODE_MAP_DUMB"); + } + dmabuf = _get_dmabuf(bufmgr_data->fd, create_dumb_arg.handle); if (dmabuf < 0) { TBM_BACKEND_ERR("fail to DRM_IOCTL_PRIME_HANDLE_TO_FD gem:%d", @@ -1393,4 +1399,4 @@ hal_backend hal_backend_tbm_data = { .exit = hal_backend_tbm_dumb_exit, .major_version = 1, .minor_version = 0, -}; \ No newline at end of file +}; -- 2.34.1