# DF-4414 — radeon_vm_fini() DragonFly livelock: `while (vm->va.rb_node)` spins forever when radeon_bo_reserve() fails

## Build

    cc -O2 -Wall -o /tmp/trigger_fini DF-4414/trigger_fini.c
    # radeon_abi.h must sit next to the .c

## Run

    /tmp/trigger_fini

**Requires a cayman-or-newer radeon KMS device and two cooperating
processes sharing a BO (GEM flink).**

## Expected result on capable hardware

* Parent: maps a flink-shared BO into its vm, keeps submitting CS so the
  BO's TTM reservation is (repeatedly) held via `ttm_eu_reserve_buffers`.
* Children: GEM_OPEN the shared BO, map it into their own vm, then exit
  with SIGKILL racing the close. A child's `postclose → radeon_vm_fini`
  must reserve the shared BO; the reservation is held by the parent and
  the child has a pending signal → `ttm_bo_reserve(..., interruptible=1)`
  returns `-ERESTARTSYS` immediately, the DFly `while (vm->va.rb_node)`
  loop makes no progress and never exits → the child's thread spins
  forever in kernel mode (unkillable), the drm fd never closes, and the
  vm is leaked. Parent observes `waitpid()` never returning.

## Observed on THIS audit guest

No radeon GPU (`/dev/dri` absent). Trigger builds and runs, exits at
device open (run.log). Mechanism proven by trace in VERDICT.md — the
divergence from upstream is DFly-specific.
