summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/wall2/nudge.sh
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