blob: edfaab26eabed701b80ce25e89b4f051ca3f0164 (
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
|
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2026 Open-IOV contributors
# gl_verify.sh - host-side: (re)start X in the running guest, verify xdpyinfo +
# glxinfo -B + shared nvClip modeNum. Prints a compact summary.
#
# Usage: bash tools/guest-diag/gl_verify.sh [--no-restart]
# --no-restart : check the current X without killing/restarting it.
set -u
HERE="$(cd "$(dirname "$0")" && pwd)"
VMEXEC=(sudo python3 "$HERE/../../scripts/vgpu_vm.py")
RESTART=1
[ "${1:-}" = "--no-restart" ] && RESTART=0
gx() { "${VMEXEC[@]}" exec --timeout "${1:-45}" "$2" 2>&1 | tail -n "${3:-40}"; }
if [ "$RESTART" = "1" ]; then
# The DDX ScreenInit is a per-start lottery ("GPU exception"): retry up to 3x.
for try in 1 2 3; do
gx 30 "pkill -f '[X]org :0' 2>/dev/null; sleep 1; systemctl reset-failed xorg0 2>/dev/null; systemd-run --unit=xorg0 --collect --setenv=HOME=/root /usr/bin/Xorg :0 -config /etc/X11/xorg.conf >/dev/null 2>&1; echo XSTART-ISSUED" >/dev/null
sleep 8
ok=$(gx 20 "timeout 12 env DISPLAY=:0 xdpyinfo >/dev/null 2>&1 && echo XDPYINFO-OK || echo X-DEAD" 3 | tail -1)
echo "try $try: $ok"
[ "$ok" = "XDPYINFO-OK" ] && break
sleep 4
done
fi
gx 40 "pgrep -c Xorg || echo NO_XORG; timeout 15 env DISPLAY=:0 xdpyinfo >/dev/null 2>&1 && echo XDPYINFO-OK || echo X-HUNG; timeout 20 env DISPLAY=:0 glxinfo -B 2>&1 | grep -E 'direct rendering|OpenGL (renderer|version|core profile version)'; timeout 20 env DISPLAY=:0 glxinfo -B >/dev/null 2>&1 && echo GLXINFO-OK || echo GLX-HUNG; bash /tmp/guest_mode.sh 2>/dev/null || echo NO_MODENUM_SCRIPT" 60
|