Radeon R700 multi-ring bug

Marek Olšák maraeo at gmail.com
Fri Apr 18 16:48:53 PDT 2014


Hi,

If you submit a lot of graphics and DMA IBs interleaved, the graphics
CS checker sometimes fails with this message:

[ 3846.435661] Forbidden register 0x0014 in cs at 9
[ 3846.435664] [drm:radeon_cs_ib_chunk] *ERROR* Invalid command stream !

This error is only used for type-0 packets, but we don't use these
packets on R700 at all. Somehow, the graphics CS checker received
either the DMA IB or random garbage. My guess is there is memory
corruption happening during IB uploading and/or IB checking in the
kernel. Also, if you are unlucky, the GPU hangs instead.

The CS thread offloading was disabled in Mesa, so the user space was
single-threaded.

There are 2 ways to fix this:
- disable async DMA in Mesa
- call usleep(1) after the RADEON_CS ioctl returns

This is just a heads-up. In the worst case, we can disable async DMA
for R700 in Mesa.

Marek


More information about the dri-devel mailing list