summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/wall2/guest_words.sh
blob: 6ac200c52e2f14d9b8d4c55e4cf0a28648d15351 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
# guest_words.sh - print "VA PA" for the +0x80 word of every 16 KB rw-s
# /dev/nvidiactl mapping of the vk_frame client (pagemap PFN -> PA).
PID=$(pgrep -x vk_frame | head -1)
[ -z "$PID" ] && exit 0
sudo grep -E 'rw-s' /proc/$PID/maps | grep nvidiactl | while read -r line; do
  RNG=$(echo "$line" | awk '{print $1}')
  LO=${RNG%-*}; HI=${RNG#*-}
  SZ=$((0x$HI - 0x$LO))
  [ "$SZ" -ne 16384 ] && continue
  VP=$(( (0x$LO + 0x80) / 4096 ))
  ENT=$(sudo dd if=/proc/$PID/pagemap bs=8 skip=$VP count=1 2>/dev/null | xxd -e -g8 | awk '{print $2}')
  [ -z "$ENT" ] && continue
  PFN=$(( 0x$ENT & 0x7fffffffffffff ))
  PA=$(( PFN * 4096 + 0x80 ))
  echo "0x$LO 0x$(printf %x $PA)"
done