From: Rob Clark Date: Sat, 14 Dec 2019 17:09:08 +0000 (-0800) Subject: freedreno/a6xx: fix OUT_REG() vs growable cmdstream X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1bf3837395b07793baa48fd71689701d4ea55e38;p=mesa.git 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 --- 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) | \