• Chris Wilson's avatar
    drm/i915/gt: Flush gen3 relocs harder, again · 2267f684
    Chris Wilson authored
    gen3 does not fully flush MI stores to memory on MI_FLUSH, such that a
    subsequent read from e.g. the sampler can bypass the store and read the
    stale value from memory. This is a serious issue when we are using MI
    stores to rewrite the batches for relocation, as it means that the batch
    is reading from random user/kernel memory. While it is particularly
    sensitive [and detectable] for relocations, reading stale data at any
    time is a worry.
    
    Having started with a small number of delaying stores and doubling until
    no more incoherency was seen over a few hours (with and without
    background memory pressure), 32 was the magic number.
    
    Note that it definitely doesn't fix the issue, merely adds a long delay
    between requests, sufficient to mostly hide the problem, enough to raise
    the mtbf to several hours. This is merely a stop gap.
    
    v2: Follow more closer with the gen5 w/a and include some
    post-invalidate flushes as well.
    
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2018
    References: a889580c ("drm/i915: Flush GPU relocs harder for gen3")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200612123949.7093-1-chris@chris-wilson.co.uk
    2267f684
gen2_engine_cs.c 7.72 KB