xf86-video-intel: 2 commits - src/sna/sna_accel.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Mar 6 13:35:34 PST 2013


 src/sna/sna_accel.c |   43 +++++++++++++++++++++++--------------------
 1 file changed, 23 insertions(+), 20 deletions(-)

New commits:
commit c6a59bee3bf5f42147f75a714f2b9aa26590329e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Mar 6 19:01:50 2013 +0000

    sna: Disable read-read optimisations
    
    There is still a lurking issue, so punt on the optimisation for now.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61628
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 750914d..ae6d3c1 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -57,6 +57,7 @@
 #define FORCE_INPLACE 0
 #define FORCE_FALLBACK 0
 #define FORCE_FLUSH 0
+#define FORCE_FULL_SYNC 1 /* https://bugs.freedesktop.org/show_bug.cgi?id=61628 */
 
 #define DEFAULT_TILING I915_TILING_X
 
@@ -1671,9 +1672,8 @@ skip_inplace_map:
 				priv->clear = false;
 			}
 
-			kgem_bo_sync__cpu_full(&sna->kgem,
-					       priv->gpu_bo,
-					       flags & MOVE_WRITE);
+			kgem_bo_sync__cpu_full(&sna->kgem, priv->gpu_bo,
+					       FORCE_FULL_SYNC || flags & MOVE_WRITE);
 			assert_pixmap_damage(pixmap);
 			DBG(("%s: operate inplace (CPU)\n", __FUNCTION__));
 			return true;
@@ -1781,8 +1781,8 @@ done:
 	if (priv->cpu_bo) {
 		if ((flags & MOVE_ASYNC_HINT) == 0) {
 			DBG(("%s: syncing CPU bo\n", __FUNCTION__));
-			kgem_bo_sync__cpu_full(&sna->kgem,
-					       priv->cpu_bo, flags & MOVE_WRITE);
+			kgem_bo_sync__cpu_full(&sna->kgem, priv->cpu_bo,
+					       FORCE_FULL_SYNC || flags & MOVE_WRITE);
 			assert(!priv->shm || !kgem_bo_is_busy(priv->cpu_bo));
 		}
 		if (flags & MOVE_WRITE) {
@@ -2312,8 +2312,8 @@ out:
 	}
 	if ((flags & MOVE_ASYNC_HINT) == 0 && priv->cpu_bo) {
 		DBG(("%s: syncing cpu bo\n", __FUNCTION__));
-		kgem_bo_sync__cpu_full(&sna->kgem,
-				       priv->cpu_bo, flags & MOVE_WRITE);
+		kgem_bo_sync__cpu_full(&sna->kgem, priv->cpu_bo,
+				       FORCE_FULL_SYNC || flags & MOVE_WRITE);
 	}
 	priv->cpu = (flags & MOVE_ASYNC_HINT) == 0;
 	assert(pixmap->devPrivate.ptr);
commit 9a7577902ee3a1286ea2a74a79aaeff6c72a6f18
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Mar 6 11:22:40 2013 +0000

    sna: Lighten the wakeup handler slightly
    
    As the wakeup handler is called more frequently, we want to avoid any of
    the more heavyweight processing. So trim the wakeup handler down to the
    check to see if the GPU is idle and so we should immediately flush what
    we have currently queued.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 25b69c9..750914d 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -14356,6 +14356,9 @@ void sna_accel_close(struct sna *sna)
 
 void sna_accel_block_handler(struct sna *sna, struct timeval **tv)
 {
+	if (sna->kgem.need_retire)
+		kgem_retire(&sna->kgem);
+
 	if (sna->timer_active)
 		UpdateCurrentTimeIf();
 
@@ -14413,27 +14416,27 @@ set_tv:
 	}
 
 	sna->kgem.scanout_busy = false;
+
+	if (FAULT_INJECTION && (rand() % FAULT_INJECTION) == 0) {
+		ErrorF("%s hardware acceleration\n",
+		       sna->kgem.wedged ? "Re-enabling" : "Disabling");
+		kgem_submit(&sna->kgem);
+		sna->kgem.wedged = !sna->kgem.wedged;
+	}
 }
 
 void sna_accel_wakeup_handler(struct sna *sna)
 {
-	DBG(("%s\n", __FUNCTION__));
+	DBG(("%s: nbatch=%d, need_retire=%d, need_purge=%d\n", __FUNCTION__,
+	     sna->kgem.nbatch, sna->kgem.need_retire, sna->kgem.need_purge));
 
-	if (sna->kgem.need_retire)
-		kgem_retire(&sna->kgem);
-	if (sna->kgem.nbatch && !sna->kgem.need_retire) {
+	if (!sna->kgem.nbatch)
+		return;
+
+	if (kgem_is_idle(&sna->kgem)) {
 		DBG(("%s: GPU idle, flushing\n", __FUNCTION__));
 		_kgem_submit(&sna->kgem);
 	}
-	if (sna->kgem.need_purge)
-		kgem_purge_cache(&sna->kgem);
-
-	if (FAULT_INJECTION && (rand() % FAULT_INJECTION) == 0) {
-		ErrorF("%s hardware acceleration\n",
-		       sna->kgem.wedged ? "Re-enabling" : "Disabling");
-		kgem_submit(&sna->kgem);
-		sna->kgem.wedged = !sna->kgem.wedged;
-	}
 }
 
 void sna_accel_free(struct sna *sna)


More information about the xorg-commit mailing list