#!/bin/bash # nudge.sh - host-side readiness-word nudger for the vk_frame wait. # Polls the guest for the 16 KB nvidiactl mapping words (guest_words.sh), # and writes 1 to any that are still 0 in the guest RAM file. # Usage: nudge.sh DUR=${1:-300} F=/dev/shm/vgpu-guest-ram END=$(( $(date +%s) + DUR )) sshpass -p ubuntu scp -o StrictHostKeyChecking=no -P 2222 /tmp/opencode/guest_words.sh ubuntu@127.0.0.1:/tmp/guest_words.sh >/dev/null 2>&1 while [ "$(date +%s)" -lt "$END" ]; do OUT=$(timeout 20 sshpass -p ubuntu ssh -o StrictHostKeyChecking=no -p 2222 ubuntu@127.0.0.1 "sudo bash /tmp/guest_words.sh" 2>/dev/null) echo "[$(date +%H:%M:%S)] words:"; echo "$OUT" echo "$OUT" | while read -r VA PA; do [ -z "$PA" ] && continue PAD=$((PA)); FOD=$((PAD - 0x80000000)) [ $FOD -lt 0 ] && continue CUR=$(sudo dd if=$F bs=4 skip=$((FOD/4)) count=1 2>/dev/null | xxd -p) if [ "$CUR" = "00000000" ]; then printf '\x01\x00\x00\x00' | sudo dd of=$F bs=1 seek=$FOD count=4 conv=notrunc 2>/dev/null echo " NUDGE $PA (va=$VA) -> 1" else echo " skip $PA (va=$VA) = $CUR" fi done sleep 2 done echo NUDGE-DONE