# DF-4693 — sili_pm: pm register accessors recycle the ata_xfer while the chip still owns the slot (deferred-timeout returns ATA_S_ONCHIP)

## Build & run

```
sh build.sh          # cc -O2 -Wall -o trigger_sili_pm trigger_sili_pm.c
sh run.sh            # ./trigger_sili_pm 15  (reset/rescan storm + dd saturation)
```

## Expected output

* **On hardware (SiI HBA + PM, other-target I/O in flight):** a PM register
  read/write (e.g. EINFO poll sili.c:530, SERR clear sili_pm.c:589, XPT_RESET_DEV
  softreset) that times out while *other* commands are still on-chip takes the
  deferred-timeout branch (`ap->ap_active != ap->ap_expired`, sili.c:2507-2510):
  `sili_ata_cmd()` returns with `xa->state == ATA_S_ONCHIP` (sili.c:1357-1359,
  2375), `sili_pm_read/pm_write` treat it as plain failure and call
  `sili_ata_put_xfer()` (sili_pm.c:667 / 702) — the CCB returns to the free
  list while the slot is still programmed and `ap_expired` processing is
  pending. Consequences: `sili_poll()` KKASSERT on slot reuse (sili.c:1321),
  `sili_ata_cmd_done` completing a re-issued ccb / unloading the new command's
  live dmamap when `sili_port_reinit()` later drains the expired slot
  (sili.c:403-411 → 2415-2418), and a stale `ap_active` bit wedging
  `sili_exclusive_access()` forever (sili.c:1437-1443).
* **On the audit QEMU guest:** no sili HBA (env.txt) — path unreachable;
  hardware gate, not a false positive.

Twin of DF-4503 (ahci_pm.c); sili instance of the DF-4027 mechanism observed
from the PM accessor call sites.
