diff --git a/src/asahi/lib/agx_device.c b/src/asahi/lib/agx_device.c index 910ec08d5f9..82fd6095eb1 100644 --- a/src/asahi/lib/agx_device.c +++ b/src/asahi/lib/agx_device.c @@ -376,7 +376,7 @@ agx_bo_make_shared(struct agx_device *dev, struct agx_bo *bo) assert(bo->prime_fd == -1); int ret = - drmPrimeHandleToFD(dev->fd, bo->handle, DRM_CLOEXEC, &bo->prime_fd); + drmPrimeHandleToFD(dev->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, &bo->prime_fd); assert(ret == 0); assert(bo->prime_fd >= 0); diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 75bd3ed5b9b..00db14a085d 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -2103,7 +2103,7 @@ device_alloc_for_wsi(struct v3dv_device *device, int fd; err = - drmPrimeHandleToFD(display_fd, create_dumb.handle, O_CLOEXEC, &fd); + drmPrimeHandleToFD(display_fd, create_dumb.handle, DRM_CLOEXEC | DRM_RDWR, &fd); if (err < 0) goto fail_export; @@ -2916,7 +2916,7 @@ v3dv_GetMemoryFdKHR(VkDevice _device, int fd, ret; ret = drmPrimeHandleToFD(device->pdevice->render_fd, mem->bo->handle, - DRM_CLOEXEC, &fd); + DRM_CLOEXEC | DRM_RDWR, &fd); if (ret) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); diff --git a/src/gallium/auxiliary/renderonly/renderonly.c b/src/gallium/auxiliary/renderonly/renderonly.c index 8ec58e638a6..6eef8049bec 100644 --- a/src/gallium/auxiliary/renderonly/renderonly.c +++ b/src/gallium/auxiliary/renderonly/renderonly.c @@ -105,7 +105,7 @@ renderonly_create_kms_dumb_buffer_for_resource(struct pipe_resource *rsc, out_handle->type = WINSYS_HANDLE_TYPE_FD; out_handle->stride = create_dumb.pitch; - err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, O_CLOEXEC, + err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, DRM_CLOEXEC | DRM_RDWR, (int *)&out_handle->handle); if (err < 0) { fprintf(stderr, "failed to export dumb buffer: %s\n", strerror(errno)); diff --git a/src/gallium/drivers/lima/lima_bo.c b/src/gallium/drivers/lima/lima_bo.c index 974418cd7b4..4b1a78dff70 100644 --- a/src/gallium/drivers/lima/lima_bo.c +++ b/src/gallium/drivers/lima/lima_bo.c @@ -395,7 +395,7 @@ bool lima_bo_export(struct lima_bo *bo, struct winsys_handle *handle) return true; case WINSYS_HANDLE_TYPE_FD: - if (drmPrimeHandleToFD(screen->fd, bo->handle, DRM_CLOEXEC, + if (drmPrimeHandleToFD(screen->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, (int*)&handle->handle)) return false; diff --git a/src/gallium/drivers/v3d/v3d_bufmgr.c b/src/gallium/drivers/v3d/v3d_bufmgr.c index 76c7a6c95ce..eef97f6d6a6 100644 --- a/src/gallium/drivers/v3d/v3d_bufmgr.c +++ b/src/gallium/drivers/v3d/v3d_bufmgr.c @@ -428,7 +428,7 @@ v3d_bo_get_dmabuf(struct v3d_bo *bo) { int fd; int ret = drmPrimeHandleToFD(bo->screen->fd, bo->handle, - O_CLOEXEC, &fd); + DRM_CLOEXEC | DRM_RDWR, &fd); if (ret != 0) { fprintf(stderr, "Failed to export gem bo %d to dmabuf\n", bo->handle); diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c index 0dd44fb1112..16805c34189 100644 --- a/src/gallium/drivers/vc4/vc4_bufmgr.c +++ b/src/gallium/drivers/vc4/vc4_bufmgr.c @@ -469,7 +469,7 @@ vc4_bo_get_dmabuf(struct vc4_bo *bo) { int fd; int ret = drmPrimeHandleToFD(bo->screen->fd, bo->handle, - O_CLOEXEC, &fd); + DRM_CLOEXEC | DRM_RDWR, &fd); if (ret != 0) { fprintf(stderr, "Failed to export gem bo %d to dmabuf\n", bo->handle); diff --git a/src/gallium/winsys/nouveau/drm/nouveau.c b/src/gallium/winsys/nouveau/drm/nouveau.c index e0277908fbd..98aa557c1ba 100644 --- a/src/gallium/winsys/nouveau/drm/nouveau.c +++ b/src/gallium/winsys/nouveau/drm/nouveau.c @@ -852,7 +852,7 @@ nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd) struct nouveau_bo_priv *nvbo = nouveau_bo(bo); int ret; - ret = drmPrimeHandleToFD(drm->fd, nvbo->base.handle, O_CLOEXEC, prime_fd); + ret = drmPrimeHandleToFD(drm->fd, nvbo->base.handle, DRM_CLOEXEC | DRM_RDWR, prime_fd); if (ret) return ret; diff --git a/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c b/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c index de80759d94c..f06420962a6 100644 --- a/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c +++ b/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c @@ -96,7 +96,7 @@ panfrost_create_kms_dumb_buffer_for_resource(struct pipe_resource *rsc, out_handle->type = WINSYS_HANDLE_TYPE_FD; out_handle->stride = create_dumb.pitch; - err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, O_CLOEXEC, + err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, DRM_CLOEXEC | DRM_RDWR, (int *)&out_handle->handle); if (err < 0) { fprintf(stderr, "failed to export dumb buffer: %s\n", strerror(errno)); diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index 105228080bc..8bfe69adbb0 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -1327,7 +1327,7 @@ static bool radeon_winsys_bo_get_handle(struct radeon_winsys *rws, } else if (whandle->type == WINSYS_HANDLE_TYPE_KMS) { whandle->handle = bo->handle; } else if (whandle->type == WINSYS_HANDLE_TYPE_FD) { - if (drmPrimeHandleToFD(ws->fd, bo->handle, DRM_CLOEXEC, (int*)&whandle->handle)) + if (drmPrimeHandleToFD(ws->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, (int*)&whandle->handle)) return false; } diff --git a/src/gallium/winsys/svga/drm/vmw_screen_dri.c b/src/gallium/winsys/svga/drm/vmw_screen_dri.c index d24a1be442f..30d27b0ab14 100644 --- a/src/gallium/winsys/svga/drm/vmw_screen_dri.c +++ b/src/gallium/winsys/svga/drm/vmw_screen_dri.c @@ -326,7 +326,7 @@ vmw_drm_surface_get_handle(struct svga_winsys_screen *sws, whandle->handle = vsrf->sid; break; case WINSYS_HANDLE_TYPE_FD: - ret = drmPrimeHandleToFD(vws->ioctl.drm_fd, vsrf->sid, DRM_CLOEXEC, + ret = drmPrimeHandleToFD(vws->ioctl.drm_fd, vsrf->sid, DRM_CLOEXEC | DRM_RDWR, (int *)&whandle->handle); if (ret) { vmw_error("Failed to get file descriptor from prime.\n"); diff --git a/src/imagination/vulkan/winsys/powervr/pvr_drm_bo.c b/src/imagination/vulkan/winsys/powervr/pvr_drm_bo.c index 02a06349811..52d134a7a2c 100644 --- a/src/imagination/vulkan/winsys/powervr/pvr_drm_bo.c +++ b/src/imagination/vulkan/winsys/powervr/pvr_drm_bo.c @@ -148,7 +148,7 @@ pvr_drm_display_buffer_create(struct pvr_drm_winsys *drm_ws, if (result != VK_SUCCESS) return result; - ret = drmPrimeHandleToFD(drm_ws->base.display_fd, handle, DRM_CLOEXEC, &fd); + ret = drmPrimeHandleToFD(drm_ws->base.display_fd, handle, DRM_CLOEXEC | DRM_RDWR, &fd); pvr_winsys_helper_display_buffer_destroy(&drm_ws->base, handle); if (ret) return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); @@ -290,7 +290,7 @@ VkResult pvr_drm_winsys_buffer_get_fd(struct pvr_winsys_bo *bo, ret = drmPrimeHandleToFD(drm_ws->base.render_fd, drm_bo->handle, - DRM_CLOEXEC, + DRM_CLOEXEC | DRM_RDWR, fd_out); if (ret) return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); diff --git a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_bo.c b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_bo.c index ea357700e93..d58b5d6409a 100644 --- a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_bo.c +++ b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_bo.c @@ -62,7 +62,7 @@ static VkResult pvr_srv_alloc_display_pmr(struct pvr_srv_winsys *srv_ws, if (result != VK_SUCCESS) return result; - ret = drmPrimeHandleToFD(srv_ws->base.display_fd, handle, O_CLOEXEC, &fd); + ret = drmPrimeHandleToFD(srv_ws->base.display_fd, handle, DRM_CLOEXEC | DRM_RDWR, &fd); if (ret) { result = vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); goto err_display_buffer_destroy; @@ -289,7 +289,7 @@ VkResult pvr_srv_winsys_buffer_get_fd(struct pvr_winsys_bo *bo, return pvr_srv_physmem_export_dmabuf(ws->render_fd, srv_bo->pmr, fd_out); /* For display buffers, export using saved buffer handle */ - ret = drmPrimeHandleToFD(ws->display_fd, srv_bo->handle, O_CLOEXEC, fd_out); + ret = drmPrimeHandleToFD(ws->display_fd, srv_bo->handle, DRM_CLOEXEC | DRM_RDWR, fd_out); if (ret) return vk_error(NULL, VK_ERROR_OUT_OF_HOST_MEMORY); diff --git a/src/panfrost/lib/kmod/panthor_kmod.c b/src/panfrost/lib/kmod/panthor_kmod.c index 661f7c16cf1..17a51c492b9 100644 --- a/src/panfrost/lib/kmod/panthor_kmod.c +++ b/src/panfrost/lib/kmod/panthor_kmod.c @@ -511,7 +511,7 @@ panthor_kmod_bo_wait(struct pan_kmod_bo *bo, int64_t timeout_ns, */ int dmabuf_fd; int ret = - drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, &dmabuf_fd); + drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, &dmabuf_fd); if (ret) { mesa_loge("drmPrimeHandleToFD() failed (err=%d)", errno); @@ -592,7 +592,7 @@ panthor_kmod_bo_attach_sync_point(struct pan_kmod_bo *bo, uint32_t sync_handle, } ret = - drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, &dmabuf_fd); + drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, &dmabuf_fd); if (ret) { mesa_loge("drmPrimeHandleToFD() failed (err=%d)", errno); close(isync.fd); @@ -654,7 +654,7 @@ panthor_kmod_bo_get_sync_point(struct pan_kmod_bo *bo, uint32_t *sync_handle, */ int dmabuf_fd; int ret = - drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, &dmabuf_fd); + drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC | DRM_RDWR, &dmabuf_fd); if (ret) { mesa_loge("drmPrimeHandleToFD() failed (err=%d)\n", errno); return -1;