From bfbe813f8fb587017c4e1d73c51395c2837eb395 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Tue, 29 May 2012 22:14:06 +0200 Subject: [PATCH] lib: fix gen5 workaround emission Using BEGIN_BATCH can lead to a nice inf recursion through require_space -> flush_batch -> BEGIN_BATCH. Also fix things up to always require BATCH_RESERVED. We need 2 dwords for the gen5 workaround and 2 dwords for MI_BB_END. --- lib/intel_batchbuffer.c | 9 +++++---- lib/intel_batchbuffer.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c index 325066e8..3fcc5787 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -84,10 +84,11 @@ intel_batchbuffer_flush_on_ring(struct intel_batchbuffer *batch, int ring) return; if (IS_GEN5(batch->devid)) { - BEGIN_BATCH(2); - OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16); - OUT_BATCH(0); - ADVANCE_BATCH(); + /* emit gen5 w/a without batch space checks - we reserve that + * already. */ + *(uint32_t *) (batch->ptr) = CMD_POLY_STIPPLE_OFFSET << 16; + *(uint32_t *) (batch->ptr) = 0; + batch->ptr += 8; } /* Round batchbuffer usage to 2 DWORDs. */ diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h index 4dffda7e..5a1fc178 100644 --- a/lib/intel_batchbuffer.h +++ b/lib/intel_batchbuffer.h @@ -63,7 +63,7 @@ static inline void intel_batchbuffer_require_space(struct intel_batchbuffer *batch, unsigned int sz) { - assert(sz < BATCH_SZ - 8); + assert(sz < BATCH_SZ - BATCH_RESERVED); if (intel_batchbuffer_space(batch) < sz) intel_batchbuffer_flush(batch); }