summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/guest-diag/pin_gr_stream.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/tools/guest-diag/pin_gr_stream.py b/tools/guest-diag/pin_gr_stream.py
index f2deacd..de2e706 100644
--- a/tools/guest-diag/pin_gr_stream.py
+++ b/tools/guest-diag/pin_gr_stream.py
@@ -242,9 +242,17 @@ def _demand_loop():
r"(?:stalled VA #\d+[:=]\s*"
r"|pending release starved va="
r"|GR ring h=0x[0-9a-f]+ rank=\d+[^\n]*?\(va=)"
- r"(0x[0-9a-f]+)",
+ r"(0x[0-9a-f]+)"
+ # r914: an unreadable GR push names its pushbuffer VA -
+ # the GL client's push page is a kernel allocation the
+ # userspace pagemap cannot cover, so the guest's content
+ # resolver is the only source (same class as the ring VA
+ # demand above). Harvest it so the guest resolves and
+ # injects the page.
+ r"|sema-pushdec: h=0x[0-9a-f]+ va=(0x[0-9a-f]+)"
+ r"[^\n]*unreadable=1",
(r.stdout or "")[-200000:]):
- va = int(m.group(1), 16)
+ va = int(m.group(1) or m.group(2), 16)
track.setdefault(va, [now, 0.0])
for va in list(track):
first, last = track[va]