aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_gem_object.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_object.c b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
index f4a5099c75b5..d77acf4cc439 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_object.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
@@ -507,6 +507,15 @@ static int igt_mmap_offset_exhaustion(void *arg)
507 u64 hole_start, hole_end; 507 u64 hole_start, hole_end;
508 int loop, err; 508 int loop, err;
509 509
510 /* Disable background reaper */
511 mutex_lock(&i915->drm.struct_mutex);
512 if (!i915->gt.active_requests++)
513 i915_gem_unpark(i915);
514 mutex_unlock(&i915->drm.struct_mutex);
515 cancel_delayed_work_sync(&i915->gt.retire_work);
516 cancel_delayed_work_sync(&i915->gt.idle_work);
517 GEM_BUG_ON(!i915->gt.awake);
518
510 /* Trim the device mmap space to only a page */ 519 /* Trim the device mmap space to only a page */
511 memset(&resv, 0, sizeof(resv)); 520 memset(&resv, 0, sizeof(resv));
512 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { 521 drm_mm_for_each_hole(hole, mm, hole_start, hole_end) {
@@ -515,7 +524,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
515 err = drm_mm_reserve_node(mm, &resv); 524 err = drm_mm_reserve_node(mm, &resv);
516 if (err) { 525 if (err) {
517 pr_err("Failed to trim VMA manager, err=%d\n", err); 526 pr_err("Failed to trim VMA manager, err=%d\n", err);
518 return err; 527 goto out_park;
519 } 528 }
520 break; 529 break;
521 } 530 }
@@ -576,6 +585,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
576 goto err_obj; 585 goto err_obj;
577 } 586 }
578 587
588 /* NB we rely on the _active_ reference to access obj now */
579 GEM_BUG_ON(!i915_gem_object_is_active(obj)); 589 GEM_BUG_ON(!i915_gem_object_is_active(obj));
580 err = i915_gem_object_create_mmap_offset(obj); 590 err = i915_gem_object_create_mmap_offset(obj);
581 if (err) { 591 if (err) {
@@ -587,6 +597,13 @@ static int igt_mmap_offset_exhaustion(void *arg)
587 597
588out: 598out:
589 drm_mm_remove_node(&resv); 599 drm_mm_remove_node(&resv);
600out_park:
601 mutex_lock(&i915->drm.struct_mutex);
602 if (--i915->gt.active_requests)
603 queue_delayed_work(i915->wq, &i915->gt.retire_work, 0);
604 else
605 queue_delayed_work(i915->wq, &i915->gt.idle_work, 0);
606 mutex_unlock(&i915->drm.struct_mutex);
590 return err; 607 return err;
591err_obj: 608err_obj:
592 i915_gem_object_put(obj); 609 i915_gem_object_put(obj);