summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-28 10:52:56 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-28 10:52:56 -0400
commit30f3363286f541198da174cc7508706484dbbee6 (patch)
treec72e3e282e5cb134858c88523eca0c3bd018017f /tools
parentcc1de524d8cea869daacc652108c76f403eb542d (diff)
downloadopen-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')
0 files changed, 0 insertions, 0 deletions