Do mode_map_dumb before export dma_buf for created dumb 76/320976/1
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 12 Mar 2025 07:33:28 +0000 (16:33 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 12 Mar 2025 07:48:17 +0000 (16:48 +0900)
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 <sw0312.kim@samsung.com>
src/tbm_backend_dumb.c

index f36162e06c64b77c6699496f7e2a6bdfa5eb4915..173f784d1960c129e3e7a8ef195223e3c0c8a57d 100644 (file)
@@ -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
+};