On Fri, Feb 10, 2017 at 10:24:41AM +0000, Tvrtko Ursulin wrote:
> >+static int igt_sg_alloc(void *ignored)
> >+{
> >+    IGT_TIMEOUT(end_time);
> >+    const unsigned long max_order = 20; /* approximating a 4GiB object */
> >+    struct rnd_state prng;
> >+    unsigned long prime;
> >+
> >+    for_each_prime_number(prime, max_order) {
> >+            unsigned long size = BIT(prime);
> >+            int offset;
> >+
> >+            for (offset = -1; offset <= 1; offset++) {
> >+                    unsigned long sz = size + offset;
> >+                    const npages_fn_t *npages;
> >+                    struct pfn_table pt;
> >+                    int err;
> >+
> >+                    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 */
> 
> We need to define at least some amount of testing which must pass
> otherwise it is just too weak in my opinion.
> 
>       return prime < TBD ? -Esomething : 0;
> 
> ?

Following our last discussion, it does a minimum of one prime [2].

static int igt_sg_alloc(void *ignored)
{
        IGT_TIMEOUT(end_time);
        const unsigned long max_order = 20; /* approximating a 4GiB object */
        struct rnd_state prng;
        unsigned long prime;
        int alloc_error = -ENOMEM;

        for_each_prime_number(prime, max_order) {
                unsigned long size = BIT(prime);
                int offset;

                for (offset = -1; offset <= 1; offset++) {
                        unsigned long sz = size + offset;
                        const npages_fn_t *npages;
                        struct pfn_table pt;
                        int err;

                        for (npages = npages_funcs; *npages; npages++) {
                                prandom_seed_state(&prng,
                                                   i915_selftest.random_seed);
                                if (!alloc_table(&pt, sz, sz, *npages, &prng))
                                        return alloc_error;

                                prandom_seed_state(&prng,
                                                   i915_selftest.random_seed);
                                err = expect_pfn_sgtable(&pt, *npages, &prng,
                                                         "sg_alloc_table",
                                                         end_time);
                                sg_free_table(&pt.st);
                                if (err)
                                        return err;
                        }
                }

                alloc_error = 0;
        }

        return 0;
}

Something like

/* Make sure we test at least one continuation before accepting oom */
if (size > MAX_SG_PER_PAGE) /* can't remember what the define is! */
        alloc_error = 0;

?

-- 
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to