blob: 143b1cd7e41b6cce98ece8e01f218f56dd1e0fb4 (
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
|
#!/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 <duration_seconds>
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
|