174 lines
4.8 KiB
Bash
174 lines
4.8 KiB
Bash
#!/bin/bash
|
|
# BC-250 Safe Post-Reboot Test Script (v2)
|
|
# Tests GPU functionality after KIQ bypass patch installation
|
|
# CRITICAL: This script performs INCREMENTAL testing with safety checks
|
|
set -e
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
pass() { echo -e "${GREEN}[PASS]${NC} $1"; }
|
|
fail() { echo -e "${RED}[FAIL]${NC} $1"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
info() { echo -e "[INFO] $1"; }
|
|
|
|
ERRORS=0
|
|
TESTS=0
|
|
|
|
echo "==========================================="
|
|
echo " BC-250 KIQ Bypass Patch - Verification"
|
|
echo " Date: $(date)"
|
|
echo "==========================================="
|
|
echo ""
|
|
|
|
# === STEP 0: Verify patch markers in dmesg ===
|
|
((TESTS++))
|
|
info "Step 0: Checking dmesg for patch markers..."
|
|
if dmesg 2>/dev/null | grep -q "BC-250 KIQ bypass active"; then
|
|
pass "BC-250 KIQ bypass markers found in dmesg"
|
|
dmesg | grep "BC-250" | while read line; do echo " → $line"; done
|
|
else
|
|
warn "No BC-250 bypass markers in dmesg yet (may appear after first GPU use)"
|
|
fi
|
|
|
|
# === STEP 1: Check for KIQ errors at boot ===
|
|
((TESTS++))
|
|
info "Step 1: Checking for KIQ errors in boot log..."
|
|
if dmesg 2>/dev/null | grep -q "timeout waiting for kiq fence"; then
|
|
fail "KIQ fence timeout detected at boot!"
|
|
((ERRORS++))
|
|
echo " → GPU is likely in a bad state. Do NOT proceed."
|
|
exit 1
|
|
else
|
|
pass "No KIQ fence timeouts at boot"
|
|
fi
|
|
|
|
# === STEP 2: Check GPU is alive ===
|
|
((TESTS++))
|
|
info "Step 2: Checking GPU hardware..."
|
|
if ls /sys/class/drm/card0/device/ &>/dev/null; then
|
|
pass "GPU DRM device present"
|
|
else
|
|
fail "No GPU DRM device"
|
|
((ERRORS++))
|
|
exit 1
|
|
fi
|
|
|
|
# === STEP 3: Check Z-Image-Turbo is disabled ===
|
|
((TESTS++))
|
|
info "Step 3: Checking Z-Image-Turbo service..."
|
|
if systemctl --user is-active zimage.service 2>/dev/null | grep -q "^active"; then
|
|
fail "Z-Image-Turbo is RUNNING! Stop it first: systemctl --user stop zimage"
|
|
((ERRORS++))
|
|
exit 1
|
|
else
|
|
pass "Z-Image-Turbo is not running"
|
|
fi
|
|
|
|
# === STEP 4: rocminfo (safe, no TLB flush) ===
|
|
((TESTS++))
|
|
info "Step 4: Running rocminfo..."
|
|
if rocminfo 2>&1 | grep -q "gfx10"; then
|
|
pass "rocminfo detects GPU"
|
|
else
|
|
fail "rocminfo failed"
|
|
((ERRORS++))
|
|
fi
|
|
|
|
# Check dmesg AGAIN after rocminfo
|
|
if dmesg 2>/dev/null | grep -q "timeout waiting for kiq fence"; then
|
|
fail "KIQ error appeared after rocminfo!"
|
|
((ERRORS++))
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
info "Step 4 complete. Checking dmesg for any BC-250 markers..."
|
|
dmesg 2>/dev/null | grep "BC-250" 2>/dev/null || info "(no BC-250 markers yet)"
|
|
echo ""
|
|
|
|
# === STEP 5: hip_probe (uses _exit(0), minimal cleanup) ===
|
|
((TESTS++))
|
|
info "Step 5: Running hip_probe (minimal GPU test)..."
|
|
cd /home/dars/VibeROCm
|
|
|
|
if [ -f hip_probe ]; then
|
|
timeout 30 ./hip_probe 2>&1
|
|
RESULT=$?
|
|
if [ $RESULT -eq 0 ]; then
|
|
pass "hip_probe passed"
|
|
else
|
|
fail "hip_probe failed (exit code: $RESULT)"
|
|
((ERRORS++))
|
|
fi
|
|
else
|
|
warn "hip_probe binary not found, skipping"
|
|
fi
|
|
|
|
# Check dmesg after hip_probe
|
|
sleep 2
|
|
if dmesg 2>/dev/null | grep -q "timeout waiting for kiq fence"; then
|
|
fail "KIQ error appeared after hip_probe!"
|
|
((ERRORS++))
|
|
echo " → The KIQ bypass patch may not be working. STOP HERE."
|
|
exit 1
|
|
fi
|
|
|
|
info "Checking BC-250 bypass markers after hip_probe..."
|
|
dmesg 2>/dev/null | grep "BC-250" 2>/dev/null || info "(no markers)"
|
|
echo ""
|
|
|
|
# === STEP 6: Wait and verify GPU is still alive ===
|
|
info "Step 6: Waiting 10 seconds to check GPU stability..."
|
|
sleep 10
|
|
if dmesg 2>/dev/null | grep -q "timeout waiting for kiq fence\|GPU fault\|GPU hang"; then
|
|
fail "GPU error detected during wait period!"
|
|
((ERRORS++))
|
|
exit 1
|
|
else
|
|
pass "GPU stable after 10-second wait"
|
|
fi
|
|
|
|
# === STEP 7: hip_vector_add (full GPU compute test) ===
|
|
((TESTS++))
|
|
info "Step 7: Running hip_vector_add (full compute test)..."
|
|
if [ -f hip_vector_add ]; then
|
|
timeout 60 ./hip_vector_add 2>&1
|
|
RESULT=$?
|
|
if [ $RESULT -eq 0 ]; then
|
|
pass "hip_vector_add passed"
|
|
else
|
|
fail "hip_vector_add failed (exit code: $RESULT)"
|
|
((ERRORS++))
|
|
fi
|
|
else
|
|
warn "hip_vector_add binary not found, skipping"
|
|
fi
|
|
|
|
# Final dmesg check
|
|
sleep 5
|
|
if dmesg 2>/dev/null | grep -q "timeout waiting for kiq fence"; then
|
|
fail "KIQ error appeared after hip_vector_add!"
|
|
((ERRORS++))
|
|
fi
|
|
|
|
echo ""
|
|
echo "==========================================="
|
|
info "Final dmesg BC-250 markers:"
|
|
dmesg 2>/dev/null | grep "BC-250" 2>/dev/null || info "(none)"
|
|
echo ""
|
|
|
|
if [ $ERRORS -eq 0 ]; then
|
|
echo -e "${GREEN}ALL TESTS PASSED${NC} ($TESTS tests)"
|
|
echo ""
|
|
echo "The KIQ bypass patch is working. The GPU survived compute workloads"
|
|
echo "without hanging. You can now safely re-enable Z-Image-Turbo:"
|
|
echo " systemctl --user enable --now zimage.service"
|
|
else
|
|
echo -e "${RED}$ERRORS ERRORS${NC} out of $TESTS tests"
|
|
echo ""
|
|
echo "The patch may need additional work. Check dmesg for details."
|
|
fi
|