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
|