• Chris Wilson's avatar
    drm/i915: Update rules for reading cache lines through the LLC · c76ce038
    Chris Wilson authored
    The LLC is a fun device. The cache is a distinct functional block within
    the SA that arbitrates access from both the CPU and GPU cores. As such
    all writes to memory land first in the LLC before further action is
    taken. For example, an uncached write from either the CPU or GPU will
    then proceed to memory and evict the cacheline from the LLC. This means that
    a read from the LLC always returns the correct information even if the PTE
    bit in the GPU differs from the PAT bit in the CPU. For the older
    snooping architecture on non-LLC, the fundamental principle still holds
    except that some coordination is required between the CPU and GPU to
    explicitly perform the snooping (which is handled by our request
    tracking).
    
    The upshot of this is that we know that we can issue a read from either
    LLC devices or snoopable memory and trust the contents of the cache -
    i.e. we can forgo a clflush before a read in these circumstances.
    Writing to memory from the CPU is a little more tricky as we have to
    consider that the scanout does not read from the CPU cache at all, but
    from main memory. So we have to currently treat all requests to write to
    uncached memory as having to be flushed to main memory for coherency
    with all consumers.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    c76ce038
i915_gem.c 120 KB