summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-30 23:27:38 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-30 23:27:38 -0400
commit237ccced7a083f48ffc10f01c05dc5c9ae0820c5 (patch)
tree12a1fdfb2f82278add6a51fc604aeb7e08e125d8 /tools
parentfdfb46733234cd1cbc378d13eb37eb75a7b3a688 (diff)
downloadopen-iov-237ccced7a083f48ffc10f01c05dc5c9ae0820c5.tar.gz
open-iov-237ccced7a083f48ffc10f01c05dc5c9ae0820c5.zip
vgsp: svc_push_page_heal (beef push all-zero read re-resolves via launch-page chain, pin/cache, src=10; sema-pushzero len cap 1024), mme-reloc-rsv (MME-family payload miss resolves via RELOC-FIXED ledger/pin/walk shadow-map), pin_gr_stream pushzero 4K-page bulk demand (48/batch); HW retire only with A+0x34a8+C dropped - draw payloads live in exactly the refused families (0x1c00-0x1c20 MME macro-code uploads / 0x3810 CALL_MME_MACRO); Graphics Exception ChID 0001 Class 0x0000c597 Offset 0 - SESSION 153 r1070-r1072
Diffstat (limited to 'tools')
-rw-r--r--tools/guest-diag/pin_gr_stream.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/guest-diag/pin_gr_stream.py b/tools/guest-diag/pin_gr_stream.py
index 776b440..0bd6759 100644
--- a/tools/guest-diag/pin_gr_stream.py
+++ b/tools/guest-diag/pin_gr_stream.py
@@ -261,6 +261,18 @@ def _demand_loop():
(r.stdout or "")[-200000:]):
va = int(m.group(1) or m.group(2) or m.group(3), 16)
track.setdefault(va, [now, 0.0])
+ # SESSION 153-CONTINUED-51: the pushzero line now carries the
+ # push length; a zero-head WINDOW push spans 1-2 pages, and the
+ # demand of a single page leaves the capture zero - expand the
+ # range and demand every page so the guest pagemap resolves the
+ # whole push at once (bulk demand instead of one page per cycle).
+ for m in re.finditer(
+ r"sema-pushzero: h=0x[0-9a-f]+ va=(0x[0-9a-f]+) len=(\d+)",
+ (r.stdout or "")[-200000:]):
+ zva = int(m.group(1), 16)
+ zlen = int(m.group(2))
+ for zoff in range(0, min(zlen, 0x8000), 0x1000):
+ track.setdefault(zva + zoff, [now, 0.0])
for va in list(track):
first, last = track[va]
if now - first > 300.0:
@@ -268,6 +280,9 @@ def _demand_loop():
todo = [va for va, (f, l) in track.items() if now - l > 20.0]
if not todo:
continue
+ # CONT-51: bound one batch's command size (a page-expanded push
+ # range can add many pages; the remainder goes next cycle).
+ todo = todo[:48]
cmd = _demand_write_cmd(todo)
try:
vexec(cmd, 30)