From c9bf1cf098c8ea4daeb3e6c9b274a9025c03045d Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 2 Oct 2026 15:13:06 -0400 Subject: kernel: GR context-promote bisection modes 4-17 and server-managed-ctxbuf registry variant; complete vgsp rename; docs/tooling refresh - gsp_phys_booter: GR promote bisection modes 4-17 (two-phase zero-field VA, batched entries, hVirtMemory, bare VA, KMD SKIP_CTXBUFFER_ALLOC channel, old-interface GPU_INITIALIZE_CTX, FBMEM context buffer, UVM-faithful PA-only, PATCH/PM auxiliary promotes, server-managed no-promote path); PATCH/PM geometry queries and buffers; pre-boot SET_REGISTRY profile selection - gsp_phys_gpu: gsp_phys_rmcall_gr_promote clamp 0..17 and gsp_phys_srv_ctxbuf parameter; registry image variant with RMSetClientRMAllocatedCtxBuffer=0 - vgsp rename across kernel, scripts, tools and docs (module vgsp.ko, /sys/kernel/debug/vgsp/, vgsp-: log prefixes) - risc-v-gsp-rm-debugger user-facing rename and docs/CI refresh; guest-diag tool updates; README/SBOM/install/Makefile sync Live status: CE ladder and P6 guest-copy forwarding green; GR engine context commit still open (all promote shapes accepted or cleanly refused; the channel stays CTXNOTVALID) - see Handoff-vGPU-IO.md Addendum 21 (local). --- tools/failure_analyzer.py | 4 ++-- tools/guest-diag/README.md | 2 +- tools/guest-diag/bridge_sems.sh | 2 +- tools/guest-diag/cycle_cdt.sh | 2 +- tools/guest-diag/inject_counters.sh | 2 +- tools/guest-diag/inject_maps.sh | 2 +- tools/guest-diag/inject_tracker.sh | 2 +- tools/guest-diag/pdwatch_cycle.sh | 26 +++++++++++++------------- tools/guest-diag/phys_claim_cycle.sh | 30 +++++++++++++++--------------- tools/guest-diag/pin_client_sems.sh | 4 ++-- tools/guest-diag/pin_gr_stream.py | 2 +- tools/guest-diag/pin_gr_window.py | 2 +- tools/guest-diag/pin_miss_pages.sh | 2 +- tools/guest-diag/pin_sem_fast.sh | 2 +- tools/guest-diag/run_cycle.sh | 2 +- tools/guest-diag/run_traced.sh | 6 +++--- tools/guest-diag/semfix_uvmt.py | 2 +- tools/guest-diag/semfix_watch.py | 2 +- tools/guest-diag/vmcycle.sh | 6 +++--- tools/guest-diag/vmrestart.sh | 6 +++--- 20 files changed, 54 insertions(+), 54 deletions(-) (limited to 'tools') diff --git a/tools/failure_analyzer.py b/tools/failure_analyzer.py index 7ffb776..11351da 100644 --- a/tools/failure_analyzer.py +++ b/tools/failure_analyzer.py @@ -126,7 +126,7 @@ class FailureAnalyzer: def _load_recommendations(self) -> Dict: return { "PCI_PROBE_FAILURE": [ - "Check PCI config space emulation in open-iov-vfio.ko (main.c)", + "Check PCI config space emulation in vgsp.ko (main.c)", "Verify BAR sizes match physical GPU (16MB/256MB/32MB/32MB)", "Check MSI-X capability pointer (0x70) and table/PBA offsets", "Ensure mdev parent registered with NVIDIA host driver", @@ -157,7 +157,7 @@ class FailureAnalyzer: "Check for IOMMU faults in dmesg", ], "VGPU_VFIO_FAILURE": [ - "Verify nvidia.ko loaded before open-iov-vfio.ko", + "Verify nvidia.ko loaded before vgsp.ko", "Check KBUILD_EXTRA_SYMBOLS points to nvidia.ko Module.symvers", "Verify nvidia_vgpu_vfio_get_ops exported by nvidia.ko", "Check mdev parent registration callback", diff --git a/tools/guest-diag/README.md b/tools/guest-diag/README.md index ea5ac14..7686ecd 100644 --- a/tools/guest-diag/README.md +++ b/tools/guest-diag/README.md @@ -31,7 +31,7 @@ syscall instruction). Kept only as documentation of that fact. ## vmcycle.sh - reload cycle -pkill QEMU -> remove mdevs -> rmmod/insmod open-iov-vfio.ko -> create a fresh +pkill QEMU -> remove mdevs -> rmmod/insmod vgsp.ko -> create a fresh `nvidia-nvidia-vgpu-turing` mdev -> patch its UUID into launch_qemu_rootport.sh -> relaunch. Guest boots in ~60-75 s. diff --git a/tools/guest-diag/bridge_sems.sh b/tools/guest-diag/bridge_sems.sh index f54801d..a024524 100755 --- a/tools/guest-diag/bridge_sems.sh +++ b/tools/guest-diag/bridge_sems.sh @@ -33,7 +33,7 @@ for i in $(seq 1 "$ITER"); do for l in "${lines[@]}"; do va=${l%%,*} pa=${l##*,} - echo "$va,$pa,0x1000,1" | sudo tee /sys/module/open_iov_vfio/parameters/sema_map_add >/dev/null + echo "$va,$pa,0x1000,1" | sudo tee /sys/module/vgsp/parameters/sema_map_add >/dev/null done total=$((total + ${#lines[@]})) last_va=${lines[-1]%%,*} diff --git a/tools/guest-diag/cycle_cdt.sh b/tools/guest-diag/cycle_cdt.sh index 009bdfc..3aaa723 100755 --- a/tools/guest-diag/cycle_cdt.sh +++ b/tools/guest-diag/cycle_cdt.sh @@ -39,7 +39,7 @@ for i in $(seq 1 24); do done # if UVM's tracking semaphore lags, poke it forward -SEMAPA=$(sudo sh -c 'echo 0x121000010,1 > /sys/module/open_iov_vfio/parameters/sema_probe' 2>/dev/null; sleep 2; sudo dmesg -T | grep -A2 "sema-probe: va=0x121000010" | grep -oE "pa=0x[0-9a-f]+" | head -1 | cut -d= -f2) +SEMAPA=$(sudo sh -c 'echo 0x121000010,1 > /sys/module/vgsp/parameters/sema_probe' 2>/dev/null; sleep 2; sudo dmesg -T | grep -A2 "sema-probe: va=0x121000010" | grep -oE "pa=0x[0-9a-f]+" | head -1 | cut -d= -f2) if [ -n "$SEMAPA" ]; then CUR=$(sudo dmesg -T | grep -A3 "sema-probe: va=0x121000010" | grep -oE "\[0\] 0x[0-9a-f]+" | tail -1 | awk '{print $2}') echo "[*] UVM tracking sema pa=$SEMAPA value=$CUR" diff --git a/tools/guest-diag/inject_counters.sh b/tools/guest-diag/inject_counters.sh index 6586a95..5ee60fd 100755 --- a/tools/guest-diag/inject_counters.sh +++ b/tools/guest-diag/inject_counters.sh @@ -30,7 +30,7 @@ set -uo pipefail HERE="$(cd "$(dirname "$0")" && pwd)" VMEXEC="$HERE/../../scripts/vgpu_vm.py" -PARAM=/sys/module/open_iov_vfio/parameters +PARAM=/sys/module/vgsp/parameters DONE=/tmp/inject_counters.done PID="${1:-}" diff --git a/tools/guest-diag/inject_maps.sh b/tools/guest-diag/inject_maps.sh index 2973311..6dcabb5 100755 --- a/tools/guest-diag/inject_maps.sh +++ b/tools/guest-diag/inject_maps.sh @@ -12,7 +12,7 @@ LOG=/tmp/inject_maps.log : > "$LOG" map_add() { # map_add - echo "0x$1,0x$2" | sudo tee /sys/module/open_iov_vfio/parameters/sema_map_add >/dev/null 2>&1 + echo "0x$1,0x$2" | sudo tee /sys/module/vgsp/parameters/sema_map_add >/dev/null 2>&1 } inject_list() { # inject_list diff --git a/tools/guest-diag/inject_tracker.sh b/tools/guest-diag/inject_tracker.sh index a563b0d..0a292e4 100755 --- a/tools/guest-diag/inject_tracker.sh +++ b/tools/guest-diag/inject_tracker.sh @@ -25,6 +25,6 @@ print('PA=0x%x'%((pfn<<12)|(va&0xfff))) [ -n "$PA" ] || { echo "NO PA FOUND"; exit 1; } echo "target pa=$PA" -sudo sh -c "echo 0x$VALPTR_HEX,$PA > /sys/module/open_iov_vfio/parameters/sema_map_add" || exit 1 +sudo sh -c "echo 0x$VALPTR_HEX,$PA > /sys/module/vgsp/parameters/sema_map_add" || exit 1 sleep 1 sudo dmesg -T | grep "injected mapping" | tail -1 diff --git a/tools/guest-diag/pdwatch_cycle.sh b/tools/guest-diag/pdwatch_cycle.sh index 45d08cc..fe758fd 100755 --- a/tools/guest-diag/pdwatch_cycle.sh +++ b/tools/guest-diag/pdwatch_cycle.sh @@ -21,15 +21,15 @@ for i in $(seq 1 30); do done echo "[*] $(date +%T) params: sema_dbg=Y, dst watch 0x200000 + 0x208000" -sudo sh -c "echo Y > /sys/module/open_iov_vfio/parameters/sema_dbg; \ -echo N > /sys/module/open_iov_vfio/parameters/sema_fake_rel; \ -echo N > /sys/module/open_iov_vfio/parameters/sema_skip_ops; \ -echo 64 > /sys/module/open_iov_vfio/parameters/sema_ops_log; \ -echo 0 > /sys/module/open_iov_vfio/parameters/sema_copy_watch; \ -echo 0 > /sys/module/open_iov_vfio/parameters/sema_copy_pat; \ -echo 0x200000 > /sys/module/open_iov_vfio/parameters/sema_copy_dst; \ -echo 0x208000 > /sys/module/open_iov_vfio/parameters/sema_copy_dst2; \ -echo 8000 > /sys/module/open_iov_vfio/parameters/sema_ce_grace_ms" +sudo sh -c "echo Y > /sys/module/vgsp/parameters/sema_dbg; \ +echo N > /sys/module/vgsp/parameters/sema_fake_rel; \ +echo N > /sys/module/vgsp/parameters/sema_skip_ops; \ +echo 64 > /sys/module/vgsp/parameters/sema_ops_log; \ +echo 0 > /sys/module/vgsp/parameters/sema_copy_watch; \ +echo 0 > /sys/module/vgsp/parameters/sema_copy_pat; \ +echo 0x200000 > /sys/module/vgsp/parameters/sema_copy_dst; \ +echo 0x208000 > /sys/module/vgsp/parameters/sema_copy_dst2; \ +echo 8000 > /sys/module/vgsp/parameters/sema_ce_grace_ms" echo "[*] $(date +%T) push tools" timeout 600 "$HERE/push_guest_tools.sh" >/dev/null 2>&1 || echo " push failed" @@ -59,7 +59,7 @@ done echo "[*] $(date +%T) shadow dumps during park" for a in 0x200000 0x201000 0x202000 0x203000 0x208000; do echo " -- $a" - sudo sh -c "echo '$a,64' > /sys/module/open_iov_vfio/parameters/sema_vidmem_dump" 2>/dev/null + sudo sh -c "echo '$a,64' > /sys/module/vgsp/parameters/sema_vidmem_dump" 2>/dev/null sleep 0.2 done sudo dmesg | grep -a "sema-vidmem\|sema-walk-probe\|sema-svc: VA space" | tail -40 > "$OUT/pdwatch_park_dmesg.txt" @@ -70,8 +70,8 @@ echo " devptr=$DEV" if [ -n "${DEV:-}" ]; then STG=$(printf '0x%x' $((DEV+0x3c00100))) echo " staging=$STG" - echo " -- walk_probe staging"; sudo sh -c "echo $STG > /sys/module/open_iov_vfio/parameters/walk_probe"; sleep 1 - echo " -- walk_probe devptr"; sudo sh -c "echo $DEV > /sys/module/open_iov_vfio/parameters/walk_probe"; sleep 1 + echo " -- walk_probe staging"; sudo sh -c "echo $STG > /sys/module/vgsp/parameters/walk_probe"; sleep 1 + echo " -- walk_probe devptr"; sudo sh -c "echo $DEV > /sys/module/vgsp/parameters/walk_probe"; sleep 1 fi echo " -- copy-dst lines so far" sudo dmesg | grep -aE "sema-copy-dst|sema-svc: applied|sema-256" | tail -30 @@ -87,7 +87,7 @@ echo "[*] $(date +%T) post-run: walk state + copy-dst log" cp "$SER" "$OUT/pdwatch_serial.log" 2>/dev/null sudo dmesg > "$OUT/pdwatch_dmesg.log" 2>/dev/null if [ -n "${STG:-}" ]; then - echo " -- post walk_probe staging"; sudo sh -c "echo $STG > /sys/module/open_iov_vfio/parameters/walk_probe"; sleep 1 + echo " -- post walk_probe staging"; sudo sh -c "echo $STG > /sys/module/vgsp/parameters/walk_probe"; sleep 1 sudo dmesg | tail -12 fi echo " -- copy-dst summary" diff --git a/tools/guest-diag/phys_claim_cycle.sh b/tools/guest-diag/phys_claim_cycle.sh index 0e00ae8..e89fbfc 100755 --- a/tools/guest-diag/phys_claim_cycle.sh +++ b/tools/guest-diag/phys_claim_cycle.sh @@ -2,7 +2,7 @@ # phys_claim_cycle.sh - supervised physical-GPU claim/release cycle harness. # # Drives one or more full "D0 pre-lock" cycles of the physical-ownership -# backend (open-iov-vfio + gsp_phys_gpu=1 + gsp_phys_hazard_ack=1): +# backend (vgsp + gsp_phys_gpu=1 + gsp_phys_hazard_ack=1): # # start persistenced -> wait GPU+root port active -> power/control=on on # GPU+port -> dmesg -C -> (stop persistenced && insmod) as ONE command -> @@ -33,7 +33,7 @@ # --dryrun also pass gsp_phys_fwsec_dryrun=1 (implies --layout): run the # READ-ONLY stage-3c validation (VBIOS/BIT/FWSEC parse and the # staging/placement plan, no device writes); expects the -# "gsp-phys-fwsec-dryrun:" and "stage 3c dry-run complete" +# "vgsp-fwsec-dryrun:" and "stage 3c dry-run complete" # lines. It is also implied by --boot-dryrun (alias) # --boot-dryrun implies --dryrun and also passes gsp_phys_boot_dryrun=1 # (implies --layout): host-memory-only stage-3d staging @@ -60,13 +60,13 @@ # this fused part: it left WPR2 up and was not host-recoverable. # It is refused immediately and never reaches insmod. Use # --boot; never stop after FWSEC alone on this host. -# --ko PATH module to insmod (default kernel/open-iov-vfio.ko) +# --ko PATH module to insmod (default kernel/vgsp.ko) # --fw NAME GSP firmware to stage (request_firmware name under # /lib/firmware; default: the module's own default, currently # nvidia/570.211.01/gsp_tu10x.bin) # --nocat pass gsp_phys_nocat=1: during --boot, log every GSP-RM NOCAT # journal record (status-queue function 0x1020) to dmesg with -# the "gsp-nocat:" prefix. The unique-record summary is +# the "vgsp-nocat:" prefix. The unique-record summary is # printed at the end of stage 3e (success or failure) with or # without this flag; per-record logging is verbose. # --restore-power restore power/control=auto and restart persistenced at @@ -106,7 +106,7 @@ BOOT_DRYRUN=0 NOCAT=0 KEEP=0 RESTORE_POWER=0 -KO="$REPO_ROOT/kernel/open-iov-vfio.ko" +KO="$REPO_ROOT/kernel/vgsp.ko" FW="" GPU_BDF="${GPU_BDF:-0000:01:00.0}" @@ -247,8 +247,8 @@ if [ -n "$WATCH_PIDS" ]; then pre_fail "stale watcher process(es) running; stop them first" fi -if lsmod 2>/dev/null | awk '{print $1}' | grep -qx open_iov_vfio; then - pre_fail "open_iov_vfio is already loaded; rmmod it first" +if lsmod 2>/dev/null | awk '{print $1}' | grep -qx vgsp; then + pre_fail "vgsp is already loaded; rmmod it first" fi command -v lspci >/dev/null 2>&1 || pre_fail "lspci not found" @@ -380,10 +380,10 @@ for n in $(seq 1 "$CYCLES"); do sleep 1 save_dmesg "$DLOG" - if grep -q "gsp-phys: refusing claim" "$DLOG" 2>/dev/null; then + if grep -q "vgsp: refusing claim" "$DLOG" 2>/dev/null; then echo "PRECONDITION FAIL: cycle $n: module refused the claim (GPU/port were already runtime-suspended)" >&2 warn "no claim was taken; unloading the module is safe" - timeout 60 sudo rmmod open_iov_vfio 2>/dev/null || true + timeout 60 sudo rmmod vgsp 2>/dev/null || true save_dmesg "$DLOG" exit 3 fi @@ -405,7 +405,7 @@ for n in $(seq 1 "$CYCLES"); do OK_DRYRUN=1 if [ "$DRYRUN" -eq 1 ]; then OK_DRYRUN=0 - if grep -q "gsp-phys-fwsec-dryrun:" "$DLOG" && \ + if grep -q "vgsp-fwsec-dryrun:" "$DLOG" && \ grep -q "stage 3c dry-run complete" "$DLOG"; then OK_DRYRUN=1 fi @@ -437,7 +437,7 @@ for n in $(seq 1 "$CYCLES"); do if [ "$NR_LOCKS" -eq 0 ] && [ "$OK_CLAIM" -eq 0 ]; then echo "ABORT: cycle $n: no locks and no claim took effect" >&2 warn "no D0 locks were taken; unloading the module is safe" - timeout 60 sudo rmmod open_iov_vfio 2>/dev/null || true + timeout 60 sudo rmmod vgsp 2>/dev/null || true save_dmesg "$DLOG" exit 2 fi @@ -454,7 +454,7 @@ for n in $(seq 1 "$CYCLES"); do warn "cycle $n: gsp_phys_layout=1 but no 'stage 3b complete' line" fi if [ "$DRYRUN" -eq 1 ] && [ "$OK_DRYRUN" -ne 1 ]; then - warn "cycle $n: gsp_phys_fwsec_dryrun=1 but the read-only dry-run did not complete (missing 'gsp-phys-fwsec-dryrun:'/'stage 3c dry-run complete')" + warn "cycle $n: gsp_phys_fwsec_dryrun=1 but the read-only dry-run did not complete (missing 'vgsp-fwsec-dryrun:'/'stage 3c dry-run complete')" fi if [ "$BOOT_DRYRUN" -eq 1 ] && [ "$OK_BOOTPRIME" -ne 1 ]; then warn "cycle $n: gsp_phys_boot_dryrun=1 but 'stage 3d prime complete' is missing (staging rehearsal did not complete)" @@ -504,9 +504,9 @@ for n in $(seq 1 "$CYCLES"); do lspci: $LSPCI_NN driver=$DRV gpu=$RSTAT_GPU port=$RSTAT_PORT power/control=on (GPU $GPU_BDF and port $PORT_BDF) - nvidia-persistenced stopped; open_iov_vfio loaded and holding the claim. + nvidia-persistenced stopped; vgsp loaded and holding the claim. To end the claimed session: - sudo rmmod open_iov_vfio + sudo rmmod vgsp echo auto | sudo tee /sys/bus/pci/devices/$GPU_BDF/power/control echo auto | sudo tee /sys/bus/pci/devices/$PORT_BDF/power/control sudo systemctl start nvidia-persistenced @@ -517,7 +517,7 @@ EOF exit 0 fi - timeout 60 sudo rmmod open_iov_vfio >/dev/null 2>&1 + timeout 60 sudo rmmod vgsp >/dev/null 2>&1 RMMOD_RC=$? sleep 1 save_dmesg "$DLOG" diff --git a/tools/guest-diag/pin_client_sems.sh b/tools/guest-diag/pin_client_sems.sh index 82d2789..af39fd1 100755 --- a/tools/guest-diag/pin_client_sems.sh +++ b/tools/guest-diag/pin_client_sems.sh @@ -34,7 +34,7 @@ pin_range() { # pin_range