From 9a7577902ee3a1286ea2a74a79aaeff6c72a6f18 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 6 Mar 2013 11:22:40 +0000 Subject: [PATCH] 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 --- src/sna/sna_accel.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 25b69c93..750914d3 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,20 +14416,6 @@ set_tv: } sna->kgem.scanout_busy = false; -} - -void sna_accel_wakeup_handler(struct sna *sna) -{ - DBG(("%s\n", __FUNCTION__)); - - if (sna->kgem.need_retire) - kgem_retire(&sna->kgem); - if (sna->kgem.nbatch && !sna->kgem.need_retire) { - 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", @@ -14436,6 +14425,20 @@ void sna_accel_wakeup_handler(struct sna *sna) } } +void sna_accel_wakeup_handler(struct sna *sna) +{ + 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.nbatch) + return; + + if (kgem_is_idle(&sna->kgem)) { + DBG(("%s: GPU idle, flushing\n", __FUNCTION__)); + _kgem_submit(&sna->kgem); + } +} + void sna_accel_free(struct sna *sna) { DBG(("%s\n", __FUNCTION__));