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

Robert Beckett bob.beckett at collabora.com
Thu Feb 3 21:19:42 UTC 2022


---
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 37 ++++++++++++++++---
 1 file changed, 32 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..fbd28ca27143 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -1076,20 +1076,29 @@ static int misaligned_case(struct i915_address_space *vm, struct intel_memory_re
 	struct i915_vma *vma;
 	int err = 0;
 	u64 expected_vma_size, expected_node_size;
+	bool is_stolen = mr->type == INTEL_MEMORY_STOLEN_SYSTEM || mr->type == INTEL_MEMORY_STOLEN_LOCAL;
 
 	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));
+		/* if iGVT-g or DMAR is active, stolen mem will be uninitialized */
+		if (PTR_ERR(obj) == -ENODEV && is_stolen)
+			return 0;
 		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 +1127,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 +1148,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 +1159,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 +1181,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