From bab762ddef24057a6b07568db3734791b6e6b930 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 9 Aug 2017 13:10:52 +0100 Subject: 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 Reviewed-by: Tvrtko Ursulin --- lib/igt_dummyload.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib/igt_dummyload.c') diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index bb2be557..d19b4e5e 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -57,6 +57,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, @@ -182,7 +183,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; } @@ -281,7 +284,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); @@ -297,6 +302,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); } -- cgit v1.2.3