# DF-5562 — ohci_pci_detach() swallows device_delete_children() failure

**OHCI member of the detach-veto family** (DF-5544 uhci_pci.c:374,
DF-5545 xhci_pci.c:355, DF-5528 fwohci_pci.c, DF-4558 atapi-cam.c —
all proven this pass / earlier).

`sys/bus/u4b/controller/ohci_pci.c:329` discards the return of
`device_delete_children(self)`; `ohci_pci_detach()` then unconditionally
resets the OHCI controller (`ohci_detach`, :337), tears down + releases
the IRQ (:339-351), releases the MMIO BAR (:352-356), frees all USB DMA
(`usb_bus_mem_free_all`, :357) and **returns 0** (:359). A child that
vetoes detach (newbus contract: `device_delete_children` →
`device_delete_child` → `device_detach(child)` == EBUSY,
sys/kern/subr_bus.c:1284-1292) is left **attached to a driverless
parent whose softc was kfree'd** by `device_set_driver(dev, NULL)`
(subr_bus.c:2150 → 1943-1945) — while kldunload / PCI hot-unplug
(`devclass_delete_driver`, subr_bus.c:889-897) is told the unload
succeeded.

## Reproduce (guest with a real OHCI controller)

Boot: `QEMU_EXTRA="-device pci-ohci" dfbsd-qemu/vm.sh up` (ohci is
compiled into X86_64_GENERIC; QEMU's pci-ohci = Apple KeyLargo
0x003f106b, matched at ohci_pci.c:173-174/266-268).

```
cd /root/df5562 && make KERNBUILDDIR=/usr/obj/usr/src/sys/X86_64_GENERIC
kldload /root/df5562/veto.ko
sysctl hw.df5562=1     # veto0 child attached + device_detach(ohci0)
sysctl hw.df5562=2     # touch parent ctx through the orphan -> panic
```

**Expected (buggy kernel)**: `veto0: DETACH VETO: returning EBUSY` →
`ohci0: detached` → `device_detach(ohci0) returned 0` → `STILL has 1
child device(s): veto0(attached=1)` → `Fatal trap 12`, fault VA 0x58,
`Stopped at df5562_thread+0x91: movq 0x58(%rax),%rcx`, guest dead in
DDB. **(Observed — see panic.txt / run.log.)**

**Expected (fix.diff kernel)**: `ohci0: child device failed to detach
(16); refusing controller teardown`, `returned 16`, `driver=ohci
state=3`, HCCA/ED DMA buffers unchanged, guest **alive** through the
exact touch that killed the baseline; after the child cooperates
(`sysctl hw.df5562=5` then `=1`) a clean 0-children detach returns 0.
**(Observed — see run.fix.log.)**

Harness: `veto.c` (DF-5544 v2 pattern — detach driven from a worker
kernel thread because the sysctl path holds gd_sysctllock).
