[Intel-gfx] [PATCH 31/37] drm/i915: Test creation of VMA

Chris Wilson chris at chris-wilson.co.uk
Fri Jan 13 12:50:34 UTC 2017


On Fri, Jan 13, 2017 at 02:28:54PM +0200, Joonas Lahtinen wrote:
> On ke, 2017-01-11 at 21:09 +0000, Chris Wilson wrote:
> > Simple test to exercise creation and lookup of VMA within an object.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> 
> <SNIP>
> 
> > +static int vma_create(struct drm_i915_private *i915,
> > +		      struct list_head *objects,
> > +		      struct list_head *contexts)
> 
> create_vmas?
> 
> <SNIP>
> 
> > +static int igt_vma_create(void *arg)
> > +{
> > +	I915_SELFTEST_TIMEOUT(end_time);
> > +	LIST_HEAD(objects);
> > +	LIST_HEAD(contexts);
> 
> Looks aesthetically dispelasing ~ messy, LIST_HEADs could go just
> before "int err" as they're not that special?
> 
> > +	struct drm_i915_private *i915 = arg;
> > +	struct drm_i915_gem_object *obj, *on;
> > +	struct i915_gem_context *ctx, *cn;
> > +	unsigned long num_obj, num_ctx;
> > +	unsigned long no, nc;
> > +	int err;
> > +
> > +	no = 0;
> > +	for_each_prime_number(num_obj, 8192) {
> 
> max_prime

s/8192/ULONG_MAX/ are you serious! ;)

> > +		for (; no < num_obj; no++) {
> > +			obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
> > +			if (IS_ERR(obj))
> > +				goto err;
> > +
> > +			list_add(&obj->batch_pool_link, &objects);
> 
> grumble...

Just put on the rose tinted glasses.
 
> > +		}
> > +
> > +		list_for_each_entry_safe(ctx, cn, &contexts, link)
> > +			mock_context_close(ctx);
> 
> I'm unsure why exactly here? On the first round it's empty.

Just the order in which I wrote the test and there was no reason to move
it...

> > +
> > +		nc = 0;
> > +		for_each_prime_number(num_ctx, 8192) {
> > +			cond_resched();
> > +			if (signal_pending(current)) {
> > +				err = -EINTR;
> > +				goto err;
> > +			}
> 
> Again something that could be made into a helper maybe, and then used
> in many points? if (igt_exit_point_or_so) return/goto...

> > +		if (time_after(jiffies, end_time)) {
> > +			pr_warn("%s timed out: after %lu objects\n", __func__, no);
> > +			break;
> > +		}
> 
> Helper too, because it's not important for the testing itself.

Already igt_timeout(timeout, fmt, ...)

I've been contemplating putting the cond_resched/interruptible check
here. The complaint above is good enough justification.

> <SNIP>
> 
> > +int i915_vma_mock_selftests(void)
> > +{
> > +	static const struct i915_subtest tests[] = {
> > +		SUBTEST(igt_vma_create),
> > +	};
> > +	struct drm_i915_private *i915;
> > +	int err;
> > +
> > +	i915 = mock_gem_device();
> > +	if (!i915)
> > +		return -ENOMEM;
> > +
> > +	mutex_lock(&i915->drm.struct_mutex);
> > +	err = i915_subtests(tests, i915);
> > +	mutex_unlock(&i915->drm.struct_mutex);
> > +
> 
> I'm unclear if i915 should be released, I feel like it should. If not,
> consider renaming mock_gem_device into getterish (but not gibberish).

It was a mistake, i.e. I forgot drm_dev_unref(&i915->drm) here.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list