# DF-4915 — `amdgpu_virt_kiq_rreg/wreg`: DF port deleted upstream's `in_interrupt()` guard → `msleep()` from hardirq + per-access console kprintf

## Build / Run / Expected

There is **no buildable PoC on this guest**: the trigger requires an AMD GPU
running as an SR-IOV **VF** (guest assigned a virtual function of a Tonga/
Fiji/Vega-class device). The audit QEMU guest has no AMD PCI device at all
(only i440fx + virtio + bochs VGA — see `env.txt`), so `amdgpu` never
instantiates an `amdgpu_device` and the code path is unreachable at runtime.

To reproduce **on hardware that has the device**:

1. On a host with an SR-IOV-capable AMD GPU (Tonga/Fiji/Polaris/Vega10),
   enable VFs (`echo N > /sys/class/drm/card0/device/sriov_numvfs` on Linux
   with the GIM/`amdgpu` PF driver, or `vgt`/SR-IOV via the vendor stack).
2. Pass one VF to a DragonFly guest (`pptdevs=0:x:y.z`), boot the guest,
   `kldload amdgpu`.
3. Observe (no fault injection needed): every MMIO access routed through the
   KIQ under `AMDGPU_SRIOV_CAPS_RUNTIME` prints
   `amdgpu_virt_kiq_rreg: implement in_interrupt() function` (or the `_wreg`
   twin) to the console — including from the GPU hard-IRQ handler on CZ-class
   parts where `cz_ih_set_rptr()` does an unconditional `WREG32(mmIH_RB_RPTR)`
   per interrupt. This is the guaranteed-by-construction console flood.
4. Fault injection (panic leg): stall the KIQ ring (host-side VF FLR, or GPU
   hang) so `amdgpu_fence_wait_polling()` never sees the fence. The next
   GPU interrupt on a CZ VF (or a Tonga VF with the IH RB_OVERFLOW bit set,
   which takes `RREG32(mmIH_RB_CNTL)` in `tonga_ih_get_wptr`) enters
   `amdgpu_virt_kiq_wreg` from hardirq context, times out after 5 ms of
   busy-wait **inside the hardirq**, then executes `msleep(5)` from hardirq
   context → illegal sleep in interrupt context (scheduler corruption /
   `panic: ...` on DEBUG kernels), retried up to 80×.

**Success criterion:** step 3 alone (console line per KIQ access) proves the
divergence; step 4 proves the illegal-sleep panic class.

## Files in this pack

- `VERDICT.md` — full narrative, path:line evidence, upstream diff.
- `trigger.md` — the trigger procedure above, machine-copyable.
- `env.txt` — guest hardware inventory proving absence of AMD GPU.
- `manifest.json`, `verdict.json` — machine records.
