agp/intel: Serialise after GTT updates
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 26 Jan 2015 10:47:10 +0000 (10:47 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 28 Jan 2015 09:15:28 +0000 (10:15 +0100)
commit983d308cb8f602d1920a8c40196eb2ab6cc07bd2
tree65aabb0a9ed28409e13e1ebde7a5584ea89a4577
parentcea3bf81af625ce0d40b2f615f10fe5bc921b2c1
agp/intel: Serialise after GTT updates

An interesting bug occurs on Pineview through which the root cause is
that the writes of the PTE values into the GTT is not serialised with
subsequent memory access through the GTT (when using WC updates of the
PTE values). This is despite there being a posting read after the GTT
update. However, by changing the address of the posting read, the memory
access is indeed serialised correctly.

Whilst we are manipulating the memory barriers, we can remove the
compiler :memory restraint on the intermediate PTE writes knowing that
we explicitly perform a posting read afterwards.

v2: Replace posting reads with explicit write memory barriers - in
particular this is advantages in case of single page objects. Update
comments to mention this issue is only with WC writes.

Testcase: igt/gem_exec_big #pnv
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88191
Tested-by: huax.lu@intel.com (v1)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/char/agp/intel-gtt.c