#!/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 -x Xorg 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