From 4ef403898f79016bb1064c0e25d68466f7121001 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Wed, 8 Apr 2026 10:20:38 +0300 Subject: [PATCH] Tighten NVIDIA GPU PCI detection --- audit/internal/app/support_bundle.go | 11 ++++++++--- iso/overlay/usr/local/bin/bee-nvidia-load | 9 +++++++-- iso/overlay/usr/local/bin/bee-selfheal | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/audit/internal/app/support_bundle.go b/audit/internal/app/support_bundle.go index 4454367..32a5a2d 100644 --- a/audit/internal/app/support_bundle.go +++ b/audit/internal/app/support_bundle.go @@ -54,7 +54,7 @@ if ! command -v lspci >/dev/null 2>&1; then exit 0 fi found=0 -for gpu in $(lspci -Dn | awk '$3 ~ /^10de:/ {print $1}'); do + for gpu in $(lspci -Dn | awk '$2 ~ /^03(00|02):$/ && $3 ~ /^10de:/ {print $1}'); do found=1 echo "=== GPU $gpu ===" lspci -s "$gpu" -vv 2>&1 || true @@ -73,8 +73,13 @@ fi {name: "system/pcie-nvidia-link.txt", cmd: []string{"sh", "-c", ` for d in /sys/bus/pci/devices/*/; do vendor=$(cat "$d/vendor" 2>/dev/null) - [ "$vendor" = "0x10de" ] || continue - dev=$(basename "$d") + [ "$vendor" = "0x10de" ] || continue + class=$(cat "$d/class" 2>/dev/null) + case "$class" in + 0x030000|0x030200) ;; + *) continue ;; + esac + dev=$(basename "$d") echo "=== $dev ===" for f in current_link_speed current_link_width max_link_speed max_link_width; do printf " %-22s %s\n" "$f" "$(cat "$d/$f" 2>/dev/null)" diff --git a/iso/overlay/usr/local/bin/bee-nvidia-load b/iso/overlay/usr/local/bin/bee-nvidia-load index 51e9fc5..048a545 100755 --- a/iso/overlay/usr/local/bin/bee-nvidia-load +++ b/iso/overlay/usr/local/bin/bee-nvidia-load @@ -21,8 +21,13 @@ read_nvidia_modules_flavor() { log "kernel: $(uname -r)" -# Skip if no NVIDIA GPU present (PCI vendor 10de) -if ! lspci -nn 2>/dev/null | grep -qi '10de:'; then +# Skip if no NVIDIA display/compute GPU is present. +# Match only display-class PCI functions (0300 VGA, 0302 3D controller) from vendor 10de. +have_nvidia_gpu() { + lspci -Dn 2>/dev/null | awk '$2 ~ /^03(00|02):$/ && $3 ~ /^10de:/ { found=1; exit } END { exit(found ? 0 : 1) }' +} + +if ! have_nvidia_gpu; then log "no NVIDIA GPU detected — skipping module load" exit 0 fi diff --git a/iso/overlay/usr/local/bin/bee-selfheal b/iso/overlay/usr/local/bin/bee-selfheal index f52c90c..0aac92f 100644 --- a/iso/overlay/usr/local/bin/bee-selfheal +++ b/iso/overlay/usr/local/bin/bee-selfheal @@ -14,7 +14,7 @@ log() { } have_nvidia_gpu() { - lspci -nn 2>/dev/null | grep -qi '10de:' + lspci -Dn 2>/dev/null | awk '$2 ~ /^03(00|02):$/ && $3 ~ /^10de:/ { found=1; exit } END { exit(found ? 0 : 1) }' } service_active() {