Skip to content

Commit

Permalink
drm/i915/selftests: try to rein in alloc_smoke
Browse files Browse the repository at this point in the history
Depending on RNG we might try to fill an 8G region for every possible
order, using the smallest possible chunk size of 4K, which seems to be
very slow. Try to remedy the situation by adding an overall timeout for
the test, while also selecting each order level in a random fashion.

Closes: https://gitlab.freedesktop.org/drm/intel/issues/1310
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200305204711.217783-2-matthew.auld@intel.com
  • Loading branch information
Matthew Auld authored and Chris Wilson committed Mar 6, 2020
1 parent f4b1b92 commit 1fe3818
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions drivers/gpu/drm/i915/selftests/i915_buddy.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,10 +298,12 @@ static void igt_mm_config(u64 *size, u64 *chunk_size)
static int igt_buddy_alloc_smoke(void *arg)
{
struct i915_buddy_mm mm;
int max_order;
IGT_TIMEOUT(end_time);
I915_RND_STATE(prng);
u64 chunk_size;
u64 mm_size;
int err;
int *order;
int err, i;

igt_mm_config(&mm_size, &chunk_size);

Expand All @@ -313,10 +315,16 @@ static int igt_buddy_alloc_smoke(void *arg)
return err;
}

for (max_order = mm.max_order; max_order >= 0; max_order--) {
order = i915_random_order(mm.max_order + 1, &prng);
if (!order)
goto out_fini;

for (i = 0; i <= mm.max_order; ++i) {
struct i915_buddy_block *block;
int order;
int max_order = order[i];
bool timeout = false;
LIST_HEAD(blocks);
int order;
u64 total;

err = igt_check_mm(&mm);
Expand Down Expand Up @@ -360,6 +368,11 @@ static int igt_buddy_alloc_smoke(void *arg)
}

total += i915_buddy_block_size(&mm, block);

if (__igt_timeout(end_time, NULL)) {
timeout = true;
break;
}
} while (total < mm.size);

if (!err)
Expand All @@ -373,7 +386,7 @@ static int igt_buddy_alloc_smoke(void *arg)
pr_err("post-mm check failed\n");
}

if (err)
if (err || timeout)
break;

cond_resched();
Expand All @@ -382,6 +395,8 @@ static int igt_buddy_alloc_smoke(void *arg)
if (err == -ENOMEM)
err = 0;

kfree(order);
out_fini:
i915_buddy_fini(&mm);

return err;
Expand Down

0 comments on commit 1fe3818

Please sign in to comment.