summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/wall2/pdbtick.py
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-25 18:01:00 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-25 18:01:00 -0400
commit0e72a0a98b930acf48be4ce02ed6d9b9341d0575 (patch)
tree0e7bd5572c47689baf8564f35b3be330ecc40d1b /tools/guest-diag/wall2/pdbtick.py
parent7421ed2686329edc2627fdc61bd9e91301d84f2b (diff)
downloadopen-iov-0e72a0a98b930acf48be4ce02ed6d9b9341d0575.tar.gz
open-iov-0e72a0a98b930acf48be4ce02ed6d9b9341d0575.zip
wall2: pdbtick.py loops (retry content-location + trigger every 1 s); session 117 evidence: the host-triggered pdb anchoring WORKS end-to-end (sema-pdb-disc -> 'VAS 0xfade0002 page directory registered after verified ring walk (pdb=0x109277000 entries=4 ap=1)'), the small GR pushes decode after the anchor (sema-push: h=0xbeec0100 va=0x4ca096c/0x4ca52c0), but the large ones (976/1432/17316 B) still skip after 210-275 rescues and the fence never releases - next: why the multi-page push reads/plausibility fail for the big pushes (the compute dispatch and the tracker), and give the pump a rewind/replay so already-skipped entries re-decode
Diffstat (limited to 'tools/guest-diag/wall2/pdbtick.py')
-rw-r--r--tools/guest-diag/wall2/pdbtick.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/tools/guest-diag/wall2/pdbtick.py b/tools/guest-diag/wall2/pdbtick.py
index 35b9ab8..d65b79d 100644
--- a/tools/guest-diag/wall2/pdbtick.py
+++ b/tools/guest-diag/wall2/pdbtick.py
@@ -41,15 +41,29 @@ def main():
t = threading.Thread(target=worker, args=(a, b)); t.start(); ts.append(t)
for t in ts: t.join()
if not res:
- print("RING NOT FOUND"); return 1
- # prefer the most recently written: check which page's entries beyond the
- # first three match this run's full 16-entry sequence; else take the last
+ print("RING NOT FOUND")
+ return None
hits = [gpa_of(x) for x in res]
- print("ring candidates:", [hex(h) for h in hits])
+ print("ring candidates:", [hex(h) for h in hits], flush=True)
for gpa in hits:
cmd = "echo 0x%x,0x%x > %s" % (RING_VA, gpa, PARAM)
r = subprocess.run(["sudo", "sh", "-c", cmd], capture_output=True)
- print("sema_pdb_discover 0x%x,0x%x rc=%d" % (RING_VA, gpa, r.returncode))
- return 0
+ print("sema_pdb_discover 0x%x,0x%x rc=%d" % (RING_VA, gpa, r.returncode), flush=True)
+ return hits
-sys.exit(main())
+
+def loop():
+ import time as _t
+ dur = float(sys.argv[1]) if len(sys.argv) > 1 else 120
+ end = _t.time() + dur
+ fired = set()
+ while _t.time() < end:
+ hits = main()
+ if hits:
+ new = [h for h in hits if h not in fired]
+ if new:
+ fired.update(new)
+ _t.sleep(1.0)
+ print("# pdbtick end", flush=True)
+
+loop()