# DF-5089 — si_copy_dma discards radeon_sync_resv()/radeon_sync_rings() returns (SI twin of DF-4871)

File: `sys/dev/drm/radeon/si_dma.c` (pass 2)

## What

`si_copy_dma()` calls both sync functions and ignores that both return `int`
(si_dma.c:255-256). On any sync failure the DMA copy packets are still emitted
and the ring committed (:258-279), so the GPU-side copy runs unordered with
respect to a pending write on the same bo — silent corruption of the migrated
buffer's contents, with a healthy-looking fence on top.

This is the SI twin of DF-4871 (r600_dma.c:466-467, same pass-2 batch family)
and was explicitly flagged in the r600 pass-2 task_log
("identical ignored radeon_sync_resv/rings returns at 255-256 — check in
own-file audits"). DF-4871's verdict already cross-referenced this exact
line pair.

Failure modes that make the ignored return real (radeon_sync.c):
- `radeon_sync_rings()` → `-EINVAL` "Syncing to a disabled ring"
  (radeon_sync.c:153-156) — reachable when a source ring went not-ready
  (failed ib test / GPU reset path).
- interrupted manual `radeon_fence_wait()` fallback (:160-163) and
  `radeon_semaphore_create()` SA-allocator failure (:165-167) on
  memory pressure.
- `radeon_sync_resv()` → interrupted `dma_fence_wait(f, true)` on a foreign
  (non-radeon) resv fence (radeon_sync.c:106, 119).

Contrast: the sibling caller `radeon_ib_schedule()` checks the identical call
and unwinds with `radeon_ring_unlock_undo()` (radeon_ib.c:149-154).

## Reproduce

Runtime trigger requires real SI (Tahiti/Pitcairn/Verde/Oland/Hainan/
Sea Islands-PCIe) hardware in a degraded state — the audit guest has none
(QEMU std VGA, 0 drm modules, no /dev/dri — env.txt). Hardware-gated Low
finding, per contract PoC-skippable; recorded `untested`. Line-level trace
in VERDICT.md.

## Fix

See fix.diff — checks both returns, moves `radeon_sync_resv()` before the
ring lock (its waits may sleep and must not hold `rdev->ring_lock`), unwinds
with `radeon_ring_unlock_undo()` + `radeon_sync_free()` + `ERR_PTR(r)`
on `radeon_sync_rings()` failure. Mirrors the DF-4871 fix shape.
