Mesa (main): v3dv: don't keep an open file descriptor for imported fences/semaphores
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 2 10:12:24 UTC 2021
Module: Mesa
Branch: main
Commit: cfb4d109a7f6e204ed026d8eceae4cb46d949198
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cfb4d109a7f6e204ed026d8eceae4cb46d949198
Author: Iago Toral Quiroga <itoral at igalia.com>
Date: Tue Jun 1 09:33:36 2021 +0200
v3dv: don't keep an open file descriptor for imported fences/semaphores
We can (and should) close the descriptor immediately after the import.
Gets the following CTS test to pass without requiring to increase limits
for open file descriptors:
dEQP-VK.synchronization.basic.binary_semaphore.chain
Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11105>
---
src/broadcom/ci/deqp-v3dv-rpi4-fails.txt | 1 -
src/broadcom/vulkan/v3dv_private.h | 6 -----
src/broadcom/vulkan/v3dv_queue.c | 39 ++++++++++----------------------
3 files changed, 12 insertions(+), 34 deletions(-)
diff --git a/src/broadcom/ci/deqp-v3dv-rpi4-fails.txt b/src/broadcom/ci/deqp-v3dv-rpi4-fails.txt
index 24e9f9f32bb..339a163339d 100644
--- a/src/broadcom/ci/deqp-v3dv-rpi4-fails.txt
+++ b/src/broadcom/ci/deqp-v3dv-rpi4-fails.txt
@@ -34,4 +34,3 @@ dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pac
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_x,Fail
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_y,Fail
dEQP-VK.api.copy_and_blit.core.blit_image.all_formats.color.3d.a8b8g8r8_uint_pack32.a8b8g8r8_uint_pack32.optimal_optimal_linear_stripes_z,Fail
-dEQP-VK.synchronization.basic.binary_semaphore.chain,Fail
diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h
index 6548f45b7d0..a69fcb19e1b 100644
--- a/src/broadcom/vulkan/v3dv_private.h
+++ b/src/broadcom/vulkan/v3dv_private.h
@@ -1372,9 +1372,6 @@ struct v3dv_semaphore {
/* A syncobject handle associated with this semaphore */
uint32_t sync;
-
- /* The file handle of a fence that we imported into our syncobject */
- int32_t fd;
};
struct v3dv_fence {
@@ -1382,9 +1379,6 @@ struct v3dv_fence {
/* A syncobject handle associated with this fence */
uint32_t sync;
-
- /* The file handle of a fence that we imported into our syncobject */
- int32_t fd;
};
struct v3dv_event {
diff --git a/src/broadcom/vulkan/v3dv_queue.c b/src/broadcom/vulkan/v3dv_queue.c
index 4e661d18ddf..fe899064878 100644
--- a/src/broadcom/vulkan/v3dv_queue.c
+++ b/src/broadcom/vulkan/v3dv_queue.c
@@ -514,21 +514,21 @@ process_semaphores_to_signal(struct v3dv_device *device,
if (fd == -1)
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+ VkResult result = VK_SUCCESS;
for (uint32_t i = 0; i < count; i++) {
struct v3dv_semaphore *sem = v3dv_semaphore_from_handle(sems[i]);
- if (sem->fd >= 0)
- close(sem->fd);
- sem->fd = -1;
-
int ret = drmSyncobjImportSyncFile(render_fd, sem->sync, fd);
- if (ret)
- return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
-
- sem->fd = fd;
+ if (ret) {
+ result = VK_ERROR_OUT_OF_HOST_MEMORY;
+ break;
+ }
}
- return VK_SUCCESS;
+ assert(fd >= 0);
+ close(fd);
+
+ return result;
}
static VkResult
@@ -539,10 +539,6 @@ process_fence_to_signal(struct v3dv_device *device, VkFence _fence)
struct v3dv_fence *fence = v3dv_fence_from_handle(_fence);
- if (fence->fd >= 0)
- close(fence->fd);
- fence->fd = -1;
-
int render_fd = device->pdevice->render_fd;
int fd;
@@ -553,12 +549,11 @@ process_fence_to_signal(struct v3dv_device *device, VkFence _fence)
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
int ret = drmSyncobjImportSyncFile(render_fd, fence->sync, fd);
- if (ret)
- return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
- fence->fd = fd;
+ assert(fd >= 0);
+ close(fd);
- return VK_SUCCESS;
+ return ret ? VK_ERROR_OUT_OF_HOST_MEMORY : VK_SUCCESS;
}
static VkResult
@@ -1131,8 +1126,6 @@ v3dv_CreateSemaphore(VkDevice _device,
if (sem == NULL)
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
- sem->fd = -1;
-
int ret = drmSyncobjCreate(device->pdevice->render_fd, 0, &sem->sync);
if (ret) {
vk_object_free(&device->vk, pAllocator, sem);
@@ -1157,9 +1150,6 @@ v3dv_DestroySemaphore(VkDevice _device,
drmSyncobjDestroy(device->pdevice->render_fd, sem->sync);
- if (sem->fd != -1)
- close(sem->fd);
-
vk_object_free(&device->vk, pAllocator, sem);
}
@@ -1188,8 +1178,6 @@ v3dv_CreateFence(VkDevice _device,
return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
}
- fence->fd = -1;
-
*pFence = v3dv_fence_to_handle(fence);
return VK_SUCCESS;
@@ -1208,9 +1196,6 @@ v3dv_DestroyFence(VkDevice _device,
drmSyncobjDestroy(device->pdevice->render_fd, fence->sync);
- if (fence->fd != -1)
- close(fence->fd);
-
vk_object_free(&device->vk, pAllocator, fence);
}
More information about the mesa-commit
mailing list