From b0e9174fc7e661504978393ac54b2b12476506a9 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Tue, 8 Oct 2013 09:43:58 +0200 Subject: sna: Disable userspace w/a for i830/845 cs incoherency In commit c7f7dd61fd07dbf938fc6ba711de07986d35ce1f Author: Chris Wilson Date: Wed Dec 12 19:43:19 2012 +0000 sna: Pin some batches to avoid CS incoherence on 830/845 the in-kernel w/a of pinning batches was duplicated for older kernels. Unfortunately the userspace w/a isn't as good as the kernel one - when restarting X we need to pin a new set of batch buffer objects. Those new batches could potentially have stale tlb entries still in the CS, leading to gpu hangs right after X started. The other problem is that when support for detecting the kernel-based w/a added to be able to opt out of it using the EXEC_IS_PINNED in commit 5b0572503eab235bc7eff20d369241330c41e630 Author: Chris Wilson Date: Sun Dec 16 23:04:55 2012 +0000 sna: Enable support for opting out of the kernel CS workaround the logic in kgem_create_batch was fumbled: Since we always opt out we should unconditionally pin the batches. The end result is that we've ended up with unpinned batches if the kernel implements the w/a :( Instead of fixing the userspace w/a to work even when the kernel w/a is available I've opted to just disable the EXEC_IS_PINNED optimization completely - given the above issues around restarting X it's imo better to be safe than sorry. Cc: Chris Wilson Signed-off-by: Daniel Vetter --- src/sna/kgem.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/sna/kgem.c b/src/sna/kgem.c index f959875d..5fcafd70 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -1381,8 +1381,6 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen) kgem->batch_flags_base |= LOCAL_I915_EXEC_NO_RELOC; if (kgem->has_handle_lut) kgem->batch_flags_base |= LOCAL_I915_EXEC_HANDLE_LUT; - if (kgem->has_pinned_batches) - kgem->batch_flags_base |= LOCAL_I915_EXEC_IS_PINNED; kgem_init_swizzling(kgem); } -- cgit v1.2.3