summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-08-09 13:10:52 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-08-11 12:00:15 +0100
commitbc2f95eca33d0d1c061837b8061a59355a196b3b (patch)
tree789a59c3d561c6d27218cc9e2ba96fd006830935
parentfb898ab1284e57f5a8e9b18d318cdb1173c689ba (diff)
lib/dummyload: Wrap global list inside its own mutex
Give the list a mutex, for we try to iterate over it from many a random context. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/igt_dummyload.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c
index 5ad386a5..5d654825 100644
--- a/lib/igt_dummyload.c
+++ b/lib/igt_dummyload.c
@@ -50,6 +50,7 @@
static const int BATCH_SIZE = 4096;
static IGT_LIST(spin_list);
+static pthread_mutex_t list_lock = PTHREAD_MUTEX_INITIALIZER;
static void
fill_reloc(struct drm_i915_gem_relocation_entry *reloc,
@@ -162,7 +163,9 @@ __igt_spin_batch_new(int fd, uint32_t ctx, unsigned engine, uint32_t dep)
emit_recursive_batch(spin, fd, ctx, engine, dep);
igt_assert(gem_bo_busy(fd, spin->handle));
+ pthread_mutex_lock(&list_lock);
igt_list_add(&spin->link, &spin_list);
+ pthread_mutex_unlock(&list_lock);
return spin;
}
@@ -261,7 +264,9 @@ void igt_spin_batch_free(int fd, igt_spin_t *spin)
if (!spin)
return;
+ pthread_mutex_lock(&list_lock);
igt_list_del(&spin->link);
+ pthread_mutex_unlock(&list_lock);
if (spin->timer)
timer_delete(spin->timer);
@@ -277,6 +282,8 @@ void igt_terminate_spin_batches(void)
{
struct igt_spin *iter;
+ pthread_mutex_lock(&list_lock);
igt_list_for_each(iter, &spin_list, link)
igt_spin_batch_end(iter);
+ pthread_mutex_unlock(&list_lock);
}