From 7ae299be60ef3ab4f8cc49edd9d5a14d826d5583 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 5 Mar 2015 08:39:31 +0000 Subject: [PATCH] sna: Remove the flush after waking up between clients In the normal command processing stream, we will have lots of opportunity to ask whether we should be batching requests together. If we wakeup without doing any work, then we will check inside the block handler whether the GPU is idle and flush then. Signed-off-by: Chris Wilson --- src/sna/sna.h | 3 +-- src/sna/sna_accel.c | 18 +----------------- src/sna/sna_driver.c | 4 +--- 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/src/sna/sna.h b/src/sna/sna.h index b5bebe80..40184041 100644 --- a/src/sna/sna.h +++ b/src/sna/sna.h @@ -1013,8 +1013,7 @@ static inline uint32_t pixmap_size(PixmapPtr pixmap) bool sna_accel_init(ScreenPtr sreen, struct sna *sna); void sna_accel_create(struct sna *sna); -void sna_accel_block_handler(struct sna *sna, struct timeval **tv); -void sna_accel_wakeup_handler(struct sna *sna); +void sna_accel_block(struct sna *sna, struct timeval **tv); void sna_accel_watch_flush(struct sna *sna, int enable); void sna_accel_flush(struct sna *sna); void sna_accel_enter(struct sna *sna); diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 467d95f9..eb58ab50 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -18068,7 +18068,7 @@ void sna_accel_close(struct sna *sna) kgem_cleanup_cache(&sna->kgem); } -void sna_accel_block_handler(struct sna *sna, struct timeval **tv) +void sna_accel_block(struct sna *sna, struct timeval **tv) { sigtrap_assert_inactive(); @@ -18148,22 +18148,6 @@ set_tv: } } -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); - } - - sigtrap_assert_inactive(); -} - void sna_accel_free(struct sna *sna) { DBG(("%s\n", __FUNCTION__)); diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c index bc20ef02..ab9ce04e 100644 --- a/src/sna/sna_driver.c +++ b/src/sna/sna_driver.c @@ -708,7 +708,7 @@ sna_block_handler(BLOCKHANDLER_ARGS_DECL) sna->BlockHandler(BLOCKHANDLER_ARGS); if (*tv == NULL || ((*tv)->tv_usec | (*tv)->tv_sec) || has_shadow(sna)) - sna_accel_block_handler(sna, tv); + sna_accel_block(sna, tv); } static void @@ -730,8 +730,6 @@ sna_wakeup_handler(WAKEUPHANDLER_ARGS_DECL) sna->WakeupHandler(WAKEUPHANDLER_ARGS); - sna_accel_wakeup_handler(sna); - if (FD_ISSET(sna->kgem.fd, (fd_set*)read_mask)) { sna_mode_wakeup(sna); /* Clear the flag so that subsequent ZaphodHeads don't block */