diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vulkan/anv_allocator.c | 18 | ||||
-rw-r--r-- | src/vulkan/tests/block_pool_no_free.c | 2 | ||||
-rw-r--r-- | src/vulkan/tests/state_pool.c | 4 | ||||
-rw-r--r-- | src/vulkan/tests/state_pool_free_list_only.c | 2 | ||||
-rw-r--r-- | src/vulkan/tests/state_pool_no_free.c | 2 |
5 files changed, 23 insertions, 5 deletions
diff --git a/src/vulkan/anv_allocator.c b/src/vulkan/anv_allocator.c index 121ce039250..201cc931cbb 100644 --- a/src/vulkan/anv_allocator.c +++ b/src/vulkan/anv_allocator.c @@ -287,6 +287,8 @@ anv_block_pool_grow(struct anv_block_pool *pool, uint32_t old_size) int gem_handle; struct anv_mmap_cleanup *cleanup; + pthread_mutex_lock(&pool->device->mutex); + if (old_size == 0) { size = 32 * pool->block_size; } else { @@ -295,17 +297,17 @@ anv_block_pool_grow(struct anv_block_pool *pool, uint32_t old_size) cleanup = anv_vector_add(&pool->mmap_cleanups); if (!cleanup) - return 0; + goto fail; *cleanup = ANV_MMAP_CLEANUP_INIT; if (old_size == 0) pool->fd = memfd_create("block pool", MFD_CLOEXEC); if (pool->fd == -1) - return 0; + goto fail; if (ftruncate(pool->fd, size) == -1) - return 0; + goto fail; /* First try to see if mremap can grow the map in place. */ map = MAP_FAILED; @@ -324,11 +326,11 @@ anv_block_pool_grow(struct anv_block_pool *pool, uint32_t old_size) cleanup->size = size; } if (map == MAP_FAILED) - return 0; + goto fail; gem_handle = anv_gem_userptr(pool->device, map, size); if (gem_handle == 0) - return 0; + goto fail; cleanup->gem_handle = gem_handle; /* Now that we successfull allocated everything, we can write the new @@ -339,7 +341,13 @@ anv_block_pool_grow(struct anv_block_pool *pool, uint32_t old_size) pool->bo.map = map; pool->bo.index = 0; + pthread_mutex_unlock(&pool->device->mutex); + return size; + +fail: + pthread_mutex_unlock(&pool->device->mutex); + return 0; } uint32_t diff --git a/src/vulkan/tests/block_pool_no_free.c b/src/vulkan/tests/block_pool_no_free.c index 898a82b0909..d40504c4a87 100644 --- a/src/vulkan/tests/block_pool_no_free.c +++ b/src/vulkan/tests/block_pool_no_free.c @@ -51,6 +51,7 @@ static void run_test() struct anv_device device; struct anv_block_pool pool; + pthread_mutex_init(&device.mutex, NULL); anv_block_pool_init(&pool, &device, 16); for (unsigned i = 0; i < NUM_THREADS; i++) { @@ -95,6 +96,7 @@ static void run_test() } anv_block_pool_finish(&pool); + pthread_mutex_destroy(&device.mutex); } int main(int argc, char **argv) diff --git a/src/vulkan/tests/state_pool.c b/src/vulkan/tests/state_pool.c index e235ee9b394..878ec19a595 100644 --- a/src/vulkan/tests/state_pool.c +++ b/src/vulkan/tests/state_pool.c @@ -38,6 +38,8 @@ int main(int argc, char **argv) struct anv_block_pool block_pool; struct anv_state_pool state_pool; + pthread_mutex_init(&device.mutex, NULL); + for (unsigned i = 0; i < NUM_RUNS; i++) { anv_block_pool_init(&block_pool, &device, 256); anv_state_pool_init(&state_pool, &block_pool); @@ -50,4 +52,6 @@ int main(int argc, char **argv) anv_state_pool_finish(&state_pool); anv_block_pool_finish(&block_pool); } + + pthread_mutex_destroy(&device.mutex); } diff --git a/src/vulkan/tests/state_pool_free_list_only.c b/src/vulkan/tests/state_pool_free_list_only.c index 9e89cf6425f..2f4eb47fe45 100644 --- a/src/vulkan/tests/state_pool_free_list_only.c +++ b/src/vulkan/tests/state_pool_free_list_only.c @@ -37,6 +37,7 @@ int main(int argc, char **argv) struct anv_block_pool block_pool; struct anv_state_pool state_pool; + pthread_mutex_init(&device.mutex, NULL); anv_block_pool_init(&block_pool, &device, 4096); anv_state_pool_init(&state_pool, &block_pool); @@ -61,4 +62,5 @@ int main(int argc, char **argv) anv_state_pool_finish(&state_pool); anv_block_pool_finish(&block_pool); + pthread_mutex_destroy(&device.mutex); } diff --git a/src/vulkan/tests/state_pool_no_free.c b/src/vulkan/tests/state_pool_no_free.c index 4b3ca78974f..4b248c2ee66 100644 --- a/src/vulkan/tests/state_pool_no_free.c +++ b/src/vulkan/tests/state_pool_no_free.c @@ -58,6 +58,7 @@ static void run_test() struct anv_block_pool block_pool; struct anv_state_pool state_pool; + pthread_mutex_init(&device.mutex, NULL); anv_block_pool_init(&block_pool, &device, 64); anv_state_pool_init(&state_pool, &block_pool); @@ -106,6 +107,7 @@ static void run_test() anv_state_pool_finish(&state_pool); anv_block_pool_finish(&block_pool); + pthread_mutex_destroy(&device.mutex); } int main(int argc, char **argv) |