sna: Fix off-by-one in checking available execbuffer slots

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2012-05-08 14:17:46 +01:00
parent 663e387b35
commit 613902b60e
7 changed files with 16 additions and 15 deletions

View File

@ -524,7 +524,7 @@ gen2_get_batch(struct sna *sna)
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
if (sna->kgem.nreloc + 3 > KGEM_RELOC_SIZE(&sna->kgem)) {
if (!kgem_check_reloc(&sna->kgem, 3)) {
DBG(("%s: flushing batch: reloc %d >= %d\n",
__FUNCTION__,
sna->kgem.nreloc + 3,
@ -533,7 +533,7 @@ gen2_get_batch(struct sna *sna)
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
if (sna->kgem.nexec + 3 > KGEM_EXEC_SIZE(&sna->kgem)) {
if (!kgem_check_exec(&sna->kgem, 3)) {
DBG(("%s: flushing batch: exec %d >= %d\n",
__FUNCTION__,
sna->kgem.nexec + 1,

View File

@ -1314,7 +1314,7 @@ gen3_get_batch(struct sna *sna)
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - MAX_OBJECTS) {
if (!kgem_check_reloc(&sna->kgem, MAX_OBJECTS)) {
DBG(("%s: flushing batch: reloc %d >= %d\n",
__FUNCTION__,
sna->kgem.nreloc,
@ -1323,7 +1323,7 @@ gen3_get_batch(struct sna *sna)
_kgem_set_mode(&sna->kgem, KGEM_RENDER);
}
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - MAX_OBJECTS - 1) {
if (!kgem_check_exec(&sna->kgem, MAX_OBJECTS)) {
DBG(("%s: flushing batch: exec %d >= %d\n",
__FUNCTION__,
sna->kgem.nexec,
@ -1792,9 +1792,9 @@ static int gen3_get_rectangles__flush(struct sna *sna,
{
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 105: 5))
return 0;
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 2)
if (!kgem_check_exec(&sna->kgem, 1))
return 0;
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 1)
if (!kgem_check_reloc(&sna->kgem, 1))
return 0;
if (op->need_magic_ca_pass && sna->render.vbo)

View File

@ -1157,9 +1157,9 @@ static int gen4_get_rectangles__flush(struct sna *sna,
{
if (!kgem_check_batch(&sna->kgem, 25))
return 0;
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
if (!kgem_check_exec(&sna->kgem, 1))
return 0;
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 1)
if (!kgem_check_reloc(&sna->kgem, 1))
return 0;
if (op->need_magic_ca_pass && sna->render.vbo)

View File

@ -1161,9 +1161,9 @@ static int gen5_get_rectangles__flush(struct sna *sna,
{
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 20 : 6))
return 0;
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
if (!kgem_check_exec(&sna->kgem, 1))
return 0;
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
if (!kgem_check_reloc(&sna->kgem, 2))
return 0;
if (op->need_magic_ca_pass && sna->render.vbo)

View File

@ -1543,9 +1543,9 @@ static int gen6_get_rectangles__flush(struct sna *sna,
{
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 65 : 5))
return 0;
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
if (!kgem_check_exec(&sna->kgem, 1))
return 0;
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
if (!kgem_check_reloc(&sna->kgem, 2))
return 0;
if (op->need_magic_ca_pass && sna->render.vbo)

View File

@ -1647,9 +1647,9 @@ static int gen7_get_rectangles__flush(struct sna *sna,
{
if (!kgem_check_batch(&sna->kgem, op->need_magic_ca_pass ? 65 : 6))
return 0;
if (sna->kgem.nexec > KGEM_EXEC_SIZE(&sna->kgem) - 1)
if (!kgem_check_exec(&sna->kgem, 1))
return 0;
if (sna->kgem.nreloc > KGEM_RELOC_SIZE(&sna->kgem) - 2)
if (!kgem_check_reloc(&sna->kgem, 2))
return 0;
if (op->need_magic_ca_pass && sna->render.vbo)

View File

@ -330,7 +330,8 @@ static inline bool kgem_check_batch_with_surfaces(struct kgem *kgem,
int num_surfaces)
{
return (int)(kgem->nbatch + num_dwords + KGEM_BATCH_RESERVED) <= (int)(kgem->surface - num_surfaces*8) &&
kgem_check_reloc(kgem, num_surfaces);
kgem_check_reloc(kgem, num_surfaces) &&
kgem_check_exec(kgem, num_surfaces);
}
static inline uint32_t *kgem_get_batch(struct kgem *kgem, int num_dwords)