Re: [PATCH] drm/i915/selftests: Create mock_engine() under struct_mutex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/08/2018 02:10 PM, Chris Wilson wrote:
Calling mock_engine() calls i915_timeline_init() and that requires
struct_mutex to be held as it adds itself to the global list of
timelines. This error was introduced by commit a89d1f921c15 ("drm/i915:
Split i915_gem_timeline into individual timelines") but the issue was
masked in CI by the earlier lockdep spam.

Fixes: a89d1f921c15 ("drm/i915: Split i915_gem_timeline into individual timelines")
Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>
Cc: Michel Thierry <michel.thierry@xxxxxxxxx>

Double checked that mock_ring (the other caller of i915_timeline_init) is covered by this same lock.

Reviewed-by: Michel Thierry <michel.thierry@xxxxxxxxx>

---
  drivers/gpu/drm/i915/selftests/mock_gem_device.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index 4b6622c6986a..94baedfa0f74 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -229,18 +229,20 @@ struct drm_i915_private *mock_gem_device(void)
  	INIT_LIST_HEAD(&i915->gt.closed_vma);
mutex_lock(&i915->drm.struct_mutex);
+
  	mock_init_ggtt(i915);
-	mutex_unlock(&i915->drm.struct_mutex);
mkwrite_device_info(i915)->ring_mask = BIT(0);
  	i915->engine[RCS] = mock_engine(i915, "mock", RCS);
  	if (!i915->engine[RCS])
-		goto err_priorities;
+		goto err_unlock;
i915->kernel_context = mock_context(i915, NULL);
  	if (!i915->kernel_context)
  		goto err_engine;
+ mutex_unlock(&i915->drm.struct_mutex);
+
  	WARN_ON(i915_gemfs_init(i915));
return i915;
@@ -248,7 +250,8 @@ struct drm_i915_private *mock_gem_device(void)
  err_engine:
  	for_each_engine(engine, i915, id)
  		mock_engine_free(engine);
-err_priorities:
+err_unlock:
+	mutex_unlock(&i915->drm.struct_mutex);
  	kmem_cache_destroy(i915->priorities);
  err_dependencies:
  	kmem_cache_destroy(i915->dependencies);

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux