[PATCH v3 6/6] [DEBUG] hunt for the nospace

Robert Beckett bob.beckett at collabora.com
Thu Feb 3 18:39:36 UTC 2022


---
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 33 ++++++++++++++++---
 1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 9afea008192d..eb07f5dc76b7 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -1078,18 +1078,23 @@ static int misaligned_case(struct i915_address_space *vm, struct intel_memory_re
 	u64 expected_vma_size, expected_node_size;
 
 	obj = i915_gem_object_create_region(mr, size, 0, 0);
-	if (IS_ERR(obj))
+	if (IS_ERR(obj)) {
+		pr_info("BOB_DEBUG: %s(): i915_gem_object_create_region returned %ld\n", __func__, PTR_ERR(obj));
 		return PTR_ERR(obj);
+	}
 
 	vma = i915_vma_instance(obj, vm, NULL);
 	if (IS_ERR(vma)) {
 		err = PTR_ERR(vma);
+		pr_info("BOB_DEBUG: %s(): i915_vma_instance returned %d\n", __func__, err);
 		goto err_put;
 	}
 
 	err = i915_vma_pin(vma, 0, 0, addr | flags);
-	if (err)
+	if (err) {
+		pr_info("BOB_DEBUG: %s(): i915_vma_pin returned %d\n", __func__, err);
 		goto err_put;
+	}
 	i915_vma_unpin(vma);
 
 	if (!drm_mm_node_allocated(&vma->node)) {
@@ -1118,8 +1123,10 @@ static int misaligned_case(struct i915_address_space *vm, struct intel_memory_re
 	}
 
 	err = i915_vma_unbind_unlocked(vma);
-	if (err)
+	if (err) {
+		pr_info("BOB_DEBUG: %s(): i915_vma_unbind_unlocked returned %d\n", __func__, err);
 		goto err_put;
+	}
 
 	GEM_BUG_ON(drm_mm_node_allocated(&vma->node));
 
@@ -1137,6 +1144,7 @@ static int misaligned_pin(struct i915_address_space *vm,
 	enum intel_region_id id;
 	unsigned long flags = PIN_OFFSET_FIXED | PIN_USER;
 	int err = 0;
+	int nummr = 0;
 	u64 hole_size = hole_end - hole_start;
 
 	if (i915_is_ggtt(vm))
@@ -1147,10 +1155,20 @@ static int misaligned_pin(struct i915_address_space *vm,
 		u64 size = min_alignment;
 		u64 addr = round_up(hole_start + (hole_size / 2), min_alignment);
 
+		if (hole_size < 3 * min_alignment)
+			continue;
+		
+		nummr++;
+
+		pr_info("BOB_DEBUG: %s(): id=%d hole_start=0x%llx hole_end=0x%llx hole_size=0x%llx min_alignment=0x%llx size=0x%llx addr=0x%llx ggtt=%d\n",
+				__func__, (int)id, hole_start, hole_end, hole_size, min_alignment, size, addr, i915_is_ggtt(vm));
+
 		/* we can't test < 4k alignment due to flags being encoded in lower bits */
 		if (min_alignment != I915_GTT_PAGE_SIZE_4K) {
 			err = misaligned_case(vm, mr, addr + (min_alignment / 2), size, flags);
 			/* misaligned should error with -EINVAL*/
+			if (err == -ENOSPC)
+				pr_info("BOB_DEBUG: %s(): misaligned case returned %d\n", __func__, err);
 			if (!err)
 				err = -EBADSLT;
 			if (err != -EINVAL)
@@ -1159,26 +1177,31 @@ static int misaligned_pin(struct i915_address_space *vm,
 
 		/* test for vma->size expansion to min page size */
 		err = misaligned_case(vm, mr, addr, PAGE_SIZE, flags);
-		if (min_alignment > hole_size) {
+		if (min_alignment >= hole_size) {
 			if (!err)
 				err = -EBADSLT;
 			else if (err == -ENOSPC)
 				err = 0;
 		}
+		if (err == -ENOSPC)
+			pr_info("BOB_DEBUG: %s(): min page size case returned %d\n", __func__, err);
 		if (err)
 			return err;
 
 		/* test for intermediate size not expanding vma->size for large alignments */
 		err = misaligned_case(vm, mr, addr, size / 2, flags);
-		if (min_alignment > hole_size) {
+		if (min_alignment >= hole_size) {
 			if (!err)
 				err = -EBADSLT;
 			else if (err == -ENOSPC)
 				err = 0;
 		}
+		if (err == -ENOSPC)
+			pr_info("BOB_DEBUG: %s(): min page size case returned %d\n", __func__, err);
 		if (err)
 			return err;
 	}
+	pr_info("BOB_DEBUG: %s(): nummr=%d\n", __func__, nummr);
 
 	return 0;
 }
-- 
2.25.1



More information about the Intel-gfx-trybot mailing list