Commit 1fe3818d authored by Matthew Auld's avatar Matthew Auld Committed by Chris Wilson

drm/i915/selftests: try to rein in alloc_smoke

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/1310Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200305204711.217783-2-matthew.auld@intel.com
parent f4b1b92f
......@@ -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);
......@@ -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);
......@@ -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)
......@@ -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();
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment