#!/bin/sh
# run_patched.sh -- fix validation on the PATCHED kernel (both findings).
# All scenarios incl. both former panic finales must run with the guest
# surviving: no panic, id-0 completions rejected, leak clamped at 46,
# timeout detaches the slot (recycle+amr_start succeeds), late
# completion tolerated as bad-slot.
set -e
ROOT=$(cd "$(dirname "$0")/../../.." && pwd)
cd "$ROOT"
V=./dfbsd-qemu/vm.sh

$V run_root 'uname -a > /root/rig/env.txt'
$V run_root 'cd /root/rig && kldload ./dfamr_rig.ko'
$V run_root 'cd /root/rig && ./dfamr_ctl prime && ./dfamr_ctl offs && ./dfamr_ctl magic'
echo "=== DF-4059B on patched kernel (expect: no stores, id rejected) ==="
$V run_root 'cd /root/rig && ./dfamr_ctl b'
echo "=== DF-4059 leak on patched kernel (expect: 46 entries max, no stack bytes) ==="
$V run_root 'cd /root/rig && ./dfamr_ctl leak 2 && dmesg | tail -70'
echo "=== DF-4060 timeout on patched kernel (expect: slot detached, no panic) ==="
$V run_root 'cd /root/rig && ./dfamr_ctl tmo 1'
echo "=== DF-4060 late on patched kernel (expect: bad-slot tolerated, no completion) ==="
$V run_root 'cd /root/rig && ./dfamr_ctl late'
echo "=== DF-4059A on patched kernel (expect: bad completion id, NO panic) ==="
$V run_root 'cd /root/rig && ./dfamr_ctl a'
echo "=== GUEST STILL ALIVE (fix validated if you see this) ==="
$V run_root 'uptime'
