diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-28 10:52:56 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-28 10:52:56 -0400 |
| commit | 30f3363286f541198da174cc7508706484dbbee6 (patch) | |
| tree | c72e3e282e5cb134858c88523eca0c3bd018017f /tools/guest-diag | |
| parent | cc1de524d8cea869daacc652108c76f403eb542d (diff) | |
| download | open-iov-30f3363286f541198da174cc7508706484dbbee6.tar.gz open-iov-30f3363286f541198da174cc7508706484dbbee6.zip | |
sema: re-run recent ring entries when a translation is replaced
A pin injected after the pump consumed pushes that release through that VA
resolved against the old (or bogus) translation, so the releases were
compared as stale against the old page's values and dropped - a new client
that maps fresh pages at the same VAs then waits forever. Rewind every
channel's last_get by 8 ring entries on injection so the pump re-reads those
pushes under the new translation; the release and fill application paths are
forward-progress guarded and idempotent, so re-execution is safe. The handler
runs in the service thread, which also runs the pump, so no pass can be
in flight during the rewind.
Diagnosed from cdt4: its tracker releases were consumed while the pin still
pointed at the previous cdt's page (value 1), so payload <= cur and every
release was dropped as stale; re-pinning afterwards could not resurrect them
because the ring entries had already been consumed.
Diffstat (limited to 'tools/guest-diag')
0 files changed, 0 insertions, 0 deletions
