From 1bf3837395b07793baa48fd71689701d4ea55e38 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sat, 14 Dec 2019 09:09:08 -0800 Subject: [PATCH] freedreno/a6xx: fix OUT_REG() vs growable cmdstream BEGIN_RING() could decide we can't fit the next packet in the current cmdstream segment, and grow a new segment. So we need to grab ring->cur *after* BEGIN_RING(), otherwise we are writing cmdstream past the end of the previous segment. Fixes: bdd98b892f3 ("freedreno: New struct packing macros") Signed-off-by: Rob Clark --- src/gallium/drivers/freedreno/a6xx/fd6_pack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_pack.h b/src/gallium/drivers/freedreno/a6xx/fd6_pack.h index 84b232e74a2..f5f8e2ca5f7 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_pack.h +++ b/src/gallium/drivers/freedreno/a6xx/fd6_pack.h @@ -76,12 +76,12 @@ struct fd_reg_pair { do { \ const struct fd_reg_pair regs[] = { __VA_ARGS__ }; \ unsigned count = ARRAY_SIZE(regs); \ - uint32_t *p = ring->cur; \ \ STATIC_ASSERT(count > 0); \ STATIC_ASSERT(count <= 16); \ \ BEGIN_RING(ring, count + 1); \ + uint32_t *p = ring->cur; \ *p++ = CP_TYPE4_PKT | count | \ (_odd_parity_bit(count) << 7) | \ ((regs[0].reg & 0x3ffff) << 8) | \ -- 2.30.2