summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/guest-diag/semfix_watch.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/tools/guest-diag/semfix_watch.py b/tools/guest-diag/semfix_watch.py
index 049a612..5124805 100644
--- a/tools/guest-diag/semfix_watch.py
+++ b/tools/guest-diag/semfix_watch.py
@@ -123,7 +123,14 @@ class Qmp:
cur = getattr(self, "_cpu", 0)
return [cur] + [c for c in range(self.ncpu()) if c != cur]
- def read64(self, addr, n=1, cache=True):
+ def read64(self, addr, n=1, cache=False):
+ # Cache is opt-in and must stay that way: every reader here watches
+ # structures the guest mutates (UVM init fills sem->page->mem->vas in
+ # place). Caching a transient zero poisoned resolve_sem_pool forever
+ # (the watcher logged "pool unresolved (retry)" while the same reads
+ # succeeded from a fresh QMP client) - the second-session pool pin
+ # never landed and the client hung in cudaMallocManaged. Default is
+ # therefore uncached; callers may opt in for within-pass scans only.
key = (addr, n)
if cache and key in self._cache:
return self._cache[key]