An i915_vma struct on the stack may push the frame over the limit, if
set conservatively, so move it to the heap.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.a...@intel.com>
---
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index d94db487c4dd..f7aa0036d900 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -212,10 +212,12 @@ static int lowlevel_hole(struct drm_i915_private *i915,
                         unsigned long end_time)
 {
        I915_RND_STATE(seed_prng);
+       struct i915_vma *mock_vma;
        unsigned int size;
-       struct i915_vma mock_vma;
 
-       memset(&mock_vma, 0, sizeof(struct i915_vma));
+       mock_vma = kzalloc(sizeof(*mock_vma), GFP_KERNEL);
+       if (!mock_vma)
+               return -ENOMEM;
 
        /* Keep creating larger objects until one cannot fit into the hole */
        for (size = 12; (hole_end - hole_start) >> size; size++) {
@@ -239,8 +241,10 @@ static int lowlevel_hole(struct drm_i915_private *i915,
                        if (order)
                                break;
                } while (count >>= 1);
-               if (!count)
+               if (!count) {
+                       kfree(mock_vma);
                        return -ENOMEM;
+               }
                GEM_BUG_ON(!order);
 
                GEM_BUG_ON(count * BIT_ULL(size) > vm->total);
@@ -283,12 +287,12 @@ static int lowlevel_hole(struct drm_i915_private *i915,
                            vm->allocate_va_range(vm, addr, BIT_ULL(size)))
                                break;
 
-                       mock_vma.pages = obj->mm.pages;
-                       mock_vma.node.size = BIT_ULL(size);
-                       mock_vma.node.start = addr;
+                       mock_vma->pages = obj->mm.pages;
+                       mock_vma->node.size = BIT_ULL(size);
+                       mock_vma->node.start = addr;
 
                        with_intel_runtime_pm(&i915->runtime_pm, wakeref)
-                               vm->insert_entries(vm, &mock_vma,
+                               vm->insert_entries(vm, mock_vma,
                                                   I915_CACHE_NONE, 0);
                }
                count = n;
@@ -311,6 +315,7 @@ static int lowlevel_hole(struct drm_i915_private *i915,
                cleanup_freed_objects(i915);
        }
 
+       kfree(mock_vma);
        return 0;
 }
 
-- 
2.24.0

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

Reply via email to