diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2019-11-02 19:19:20 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-11-02 21:10:39 +0000 |
commit | b5ac286c9bb0e13c5c23b2f76c7b9445587371df (patch) | |
tree | b7a7bc30d54ee5b71002d06acc5e1ba68a1373fe /src | |
parent | bff5eca49b27cb47673123222a714d2a6f56287f (diff) |
sna: Close each client op with an arbitrartion check
Minimise preemption latency by frequently checking for pending preemption
events in between X11 client requests.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src')
-rw-r--r-- | src/sna/sna_accel.c | 2 | ||||
-rw-r--r-- | src/sna/sna_reg.h | 1 | ||||
-rw-r--r-- | src/sna/sna_render.c | 3 |
3 files changed, 6 insertions, 0 deletions
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index fa386ff6..a464f4b4 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -5302,6 +5302,8 @@ inline static void blt_done(struct sna *sna) DBG(("%s: flushing BLT operation on empty ring\n", __FUNCTION__)); _kgem_submit(&sna->kgem); + } else { + sna->kgem.batch[sna->kgem.nbatch++] = MI_ARB_CHECK; } } diff --git a/src/sna/sna_reg.h b/src/sna/sna_reg.h index 92a1ae57..0531fabf 100644 --- a/src/sna/sna_reg.h +++ b/src/sna/sna_reg.h @@ -14,6 +14,7 @@ /* broadwater flush bits */ #define BRW_MI_GLOBAL_SNAPSHOT_RESET (1 << 3) +#define MI_ARB_CHECK (0x5 << 23) #define MI_BATCH_BUFFER_END (0xA << 23) /* Noop */ diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index 904d4400..7145da90 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -32,6 +32,7 @@ #include "sna.h" #include "sna_render.h" #include "sna_render_inline.h" +#include "sna_reg.h" #include "fb/fbpict.h" #define NO_REDIRECT 0 @@ -2129,6 +2130,8 @@ sna_render_composite_redirect_done(struct sna *sna, kgem_bo_destroy(&sna->kgem, op->dst.bo); } + + batch_emit(sna, MI_ARB_CHECK); } static bool |