[Intel-gfx] [PATCH v2 03/38] drm/i915: Add some selftests for sg_table manipulation
Chris Wilson
chris at chris-wilson.co.uk
Wed Feb 1 11:34:50 UTC 2017
On Wed, Feb 01, 2017 at 11:17:39AM +0000, Tvrtko Ursulin wrote:
> >+static noinline int expect_pfn_sg(struct pfn_table *pt,
>
> Why noinline?
So they show up in perf individually.
> >+
> >+ for (npages = npages_funcs; *npages; npages++) {
> >+ prandom_seed_state(&prng,
> >+ i915_selftest.random_seed);
> >+ if (!alloc_table(&pt, sz, sz, *npages, &prng))
> >+ return 0; /* out of memory, give up */
>
> You don't have skip status? Sounds not ideal to silently abort.
It runs until we use all physical memory, if left to its own devices. It's
not a skip if we have already completed some tests. ENOMEM of the test
setup itself is not what I'm testing for here, the test is for the
iterators.
> >+
> >+ prandom_seed_state(&prng,
> >+ i915_selftest.random_seed);
> >+ err = expect_pfn_sgtable(&pt, *npages, &prng,
> >+ "sg_alloc_table",
> >+ end_time);
>
> Random numbers you use are guaranteed to be the same sequence after
> you re-set the seed? Probably yes since otherwise this wouldn't have
> ever worked.. I just remember some discussion on what source we use
> and it looked like we might be using proper random numbers on some
> CPUs, or even urandom which I didn't think has that property.
It's a completely deterministic prng. get_random_int() is the urandom
equivalent.
> >+static int igt_sg_trim(void *ignored)
> >+{
> >+ IGT_TIMEOUT(end_time);
> >+ const unsigned long max = PAGE_SIZE; /* not prime! */
> >+ struct pfn_table pt;
> >+ unsigned long prime;
> >+
> >+ for_each_prime_number(prime, max) {
> >+ const npages_fn_t *npages;
> >+ int err;
> >+
> >+ for (npages = npages_funcs; *npages; npages++) {
> >+ struct rnd_state prng;
> >+
> >+ prandom_seed_state(&prng, i915_selftest.random_seed);
> >+ if (!alloc_table(&pt, prime, max, *npages, &prng))
> >+ return 0; /* out of memory, give up */
> >+
> >+ err = 0;
> >+ if (i915_sg_trim(&pt.st)) {
> >+ if (pt.st.orig_nents != prime ||
> >+ pt.st.nents != prime) {
> >+ pr_err("i915_sg_trim failed (nents %u, orig_nents %u), expected %lu\n",
> >+ pt.st.nents, pt.st.orig_nents, prime);
> >+ err = -EINVAL;
> >+ } else {
> >+ prandom_seed_state(&prng,
> >+ i915_selftest.random_seed);
> >+ err = expect_pfn_sgtable(&pt,
> >+ *npages, &prng,
> >+ "i915_sg_trim",
> >+ end_time);
> >+ }
> >+ }
>
> Similar to alloc_table failures above - no log or action when
> i915_sg_trim fails due out of memory?
No, simply because that's an expected and acceptable result. The
question should be whether we always want to check after sg_trim.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list