drm/i915/gtt: Relax pd_used assertion
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 20 Aug 2019 14:12:18 +0000 (15:12 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 20 Aug 2019 14:32:39 +0000 (15:32 +0100)
The current assertion tries to make sure that we do not over count the
number of used PDE inside a page directory -- that is with an array of
512 pde, we do not expect more than 512 elements used! However, our
assertion has to take into account that as we pin an element into the
page directory, the caller first pins the page directory so the usage
count is one higher. However, this should be one extra pin per thread,
and the upper bound is that we may have one thread for each entry.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190820141218.14714-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_gtt.c

index 00d4efcd426995d782d7c036a16231b1d321cca0..2cd2dabbcd3bc24c263b05b5b306a63428c44c62 100644 (file)
@@ -771,7 +771,8 @@ __set_pd_entry(struct i915_page_directory * const pd,
               struct i915_page_dma * const to,
               u64 (*encode)(const dma_addr_t, const enum i915_cache_level))
 {
-       GEM_BUG_ON(atomic_read(px_used(pd)) > ARRAY_SIZE(pd->entry));
+       /* Each thread pre-pins the pd, and we may have a thread per pde. */
+       GEM_BUG_ON(atomic_read(px_used(pd)) > 2 * ARRAY_SIZE(pd->entry));
 
        atomic_inc(px_used(pd));
        pd->entry[idx] = to;