#!/bin/sh
# DF-2426 fixed-kernel A/B run (after make_fixed.sh): the same
# triggers that panicked the baseline kernel must now complete.
#   control    -> CAM_REQ_CMP 64/32/100 (unchanged behavior)
#   trigger0   -> no trap; CAM_REQ_CMP_ERR from cam_calc_geometry
#   trigger2   -> no trap; CAM_REQ_CMP_ERR from cam_calc_geometry
set -e
VM=/home/maxx/dfbsd/dfbsd/dfbsd-qemu/vm.sh
cd "$(dirname "$0")"

$VM status

echo '=== FIXED: DF-2426 control (block_size=512) ==='
timeout 60 $VM run_root 'sysctl debug.df2426.control=1' \
	> run_fixed_control.log 2>&1 || true
cat run_fixed_control.log

echo '=== FIXED: DF-2426 trigger0 (block_size=0) -- expect NO panic ==='
timeout 40 $VM run_root 'sysctl debug.df2426.trigger0=1' \
	> run_fixed_trigger0.log 2>&1 || true
cat run_fixed_trigger0.log || true

echo '=== FIXED: DF-2426 trigger2 (block_size=2MiB) -- expect NO panic ==='
timeout 40 $VM run_root 'sysctl debug.df2426.trigger_big=1' \
	> run_fixed_trigger_big.log 2>&1 || true
cat run_fixed_trigger_big.log || true

$VM run_root 'dmesg | tail -60' > run_fixed_dmesg.log 2>&1 || true
grep -E "DFH:|Fatal trap" run_fixed_dmesg.log | tail -30 || true
if ! grep -q "DF-2426 trigger" run_fixed_dmesg.log; then
	echo "EVIDENCE MISSING: dmesg has no trigger output (guest down?)"
	exit 1
fi
if grep -q "^Fatal trap" run_fixed_dmesg.log; then
	echo "STILL PANICS ON FIXED KERNEL"
	exit 1
fi
echo 'FIXED RUN OK: no trap, CAM_REQ_CMP_ERR returned'
