blob: d31444d0fcd5faf90aa6db76195f39b57c47d2ef (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/bin/bash
# test_vgpu_stack.sh - Comprehensive vGPU stack test
set -euo pipefail
BASE_DIR="$OPEN_IOV_ROOT"
LIB_DIR="$BASE_DIR/userspace/lib"
EXAMPLE="$BASE_DIR/userspace/examples/example_vgpu"
echo "=========================================="
echo "vGPU Stack Test Suite"
echo "=========================================="
# Test 1: Module loading
echo "Test 1: Module loading"
for mod in nvidia open_iov_vfio gsp_vgpu; do
if lsmod | grep -q "^$mod "; then
echo " PASS: $mod loaded"
else
echo " FAIL: $mod not loaded"
exit 1
fi
done
# Test 2: Device nodes
echo "Test 2: Device nodes"
if [[ -c /dev/gsp-vgpu ]]; then
echo " PASS: /dev/gsp-vgpu exists"
else
echo " FAIL: /dev/gsp-vgpu missing"
exit 1
fi
# Test 3: Library loading
echo "Test 3: Library loading"
if LD_LIBRARY_PATH="$LIB_DIR" ldd "$EXAMPLE" 2>&1 | grep -q "libiov.so"; then
echo " PASS: libiov.so loads correctly"
else
echo " FAIL: libiov.so load failed"
exit 1
fi
# Test 4: Example app help
echo "Test 4: Example app help"
if LD_LIBRARY_PATH="$LIB_DIR" "$EXAMPLE" --help 2>&1 | grep -q "Usage"; then
echo " PASS: example_vgpu runs"
else
echo " FAIL: example_vgpu failed"
exit 1
fi
# Test 5: mdev creation (if GPU available)
echo "Test 5: mdev creation"
GPU_PCI=$(lspci -D -d 10de: | grep -E "VGA|3D controller" | head -1 | awk '{print $1}')
if [[ -n "$GPU_PCI" ]]; then
echo " Found GPU: $GPU_PCI"
MDEV_TYPE_PATH="/sys/bus/pci/devices/$GPU_PCI/mdev_supported_types/nvidia-vgpu-turing"
if [[ -d "$MDEV_TYPE_PATH" ]]; then
AVAIL=$(cat "$MDEV_TYPE_PATH/available_instances" 2>/dev/null || echo 0)
if [[ "$AVAIL" -gt 0 ]]; then
UUID=$(uuidgen)
echo "$UUID" | sudo tee "$MDEV_TYPE_PATH/create" > /dev/null
sleep 1
if [[ -d "/sys/bus/mdev/devices/$UUID" ]]; then
echo " PASS: mdev created: $UUID"
# Cleanup
echo 1 | sudo tee "/sys/bus/mdev/devices/$UUID/remove" > /dev/null
else
echo " FAIL: mdev creation failed"
exit 1
fi
else
echo " SKIP: No available instances"
fi
else
echo " SKIP: nvidia-vgpu-turing type not available"
fi
else
echo " SKIP: No NVIDIA GPU found"
fi
# Test 6: Kernel log check
echo "Test 6: Kernel log check"
if dmesg -T | grep -q "GSP vGPU-IO driver loaded"; then
echo " PASS: gsp-vgpu driver loaded successfully"
else
echo " WARN: gsp-vgpu load message not found in dmesg"
fi
if dmesg -T | grep -q "NVIDIA vGPU VFIO driver loaded"; then
echo " PASS: open-iov-vfio driver loaded successfully"
else
echo " WARN: open-iov-vfio load message not found in dmesg"
fi
# Test 7: Firmware verification
echo "Test 7: Firmware verification"
FW="$BASE_DIR/firmware/570-GSP/gsp-570.144.fwimage.bin"
if [[ -f "$FW" ]]; then
SIZE=$(stat -c%s "$FW")
EXPECTED=29622272 # ~28.5MB
if [[ "$SIZE" -eq "$EXPECTED" ]]; then
echo " PASS: Firmware size correct ($SIZE bytes)"
else
echo " WARN: Firmware size mismatch: $SIZE (expected $EXPECTED)"
fi
# Check ELF header
if file "$FW" | grep -q "ELF 64-bit LSB executable, UCB RISC-V"; then
echo " PASS: Firmware is valid RISC-V ELF"
else
echo " FAIL: Firmware is not valid RISC-V ELF"
exit 1
fi
else
echo " FAIL: Firmware not found"
exit 1
fi
echo ""
echo "=========================================="
echo "All Tests Passed!"
echo "=========================================="
echo ""
echo "Stack is ready for QEMU guest launch."
echo "Run: $BASE_DIR/scripts/create_mdev.sh"
echo "Then: $BASE_DIR/scripts/launch_qemu_vgpu.sh"
|