summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vulkan/anv_allocator.c18
-rw-r--r--src/vulkan/tests/block_pool_no_free.c2
-rw-r--r--src/vulkan/tests/state_pool.c4
-rw-r--r--src/vulkan/tests/state_pool_free_list_only.c2
-rw-r--r--src/vulkan/tests/state_pool_no_free.c2
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)