Read ordering on cpu can be out of order and speculative. In addition, the access to the hardware status page is snooped. This raises a concern that we might use the HWSP in an unexpected way as we may load the head of a cbs entry before we access the tail. Concerns like that the coherency protocol is tied somehow to the tail read snoop.
To enforce that we really do read the tail before we fetch the csb entry pointed by head, insert a read memory barrier after we have read the tail. This fixes, or masks due to added latency, context status buffer incoherence on cnl, where we see an old context status entry still on that a csb slot. References: https://bugs.freedesktop.org/show_bug.cgi?id=105888 Cc: Chris Wilson <ch...@chris-wilson.co.uk> Cc: Rafael Antognolli <rafael.antogno...@intel.com> Cc: Vivi, Rodrigo <rodrigo.v...@intel.com> Signed-off-by: Mika Kuoppala <mika.kuopp...@linux.intel.com> --- drivers/gpu/drm/i915/intel_lrc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index c7c85134a84a..5378391e1e71 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c @@ -969,6 +969,8 @@ static void execlists_submission_tasklet(unsigned long data) head = execlists->csb_head; tail = READ_ONCE(buf[write_idx]); + /* Enforce ordering of reads into the HWSP */ + rmb(); } GEM_TRACE("%s cs-irq head=%d [%d%s], tail=%d [%d%s]\n", engine->name, -- 2.14.1 _______________________________________________ Intel-gfx mailing list Intelfirstname.lastname@example.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx