diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-09 21:44:24 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-09 21:44:24 -0400 |
| commit | d0ae432ade6941a705875b9db2a9d26b23c23b59 (patch) | |
| tree | 7decdaf9ad84353c5f2ebb5f5083a1f4437a2f3a /kernel/memory.c | |
| parent | be6e5ee20e50b3109b74bdd9c18f15f8f8c3f724 (diff) | |
| download | open-iov-d0ae432ade6941a705875b9db2a9d26b23c23b59.tar.gz open-iov-d0ae432ade6941a705875b9db2a9d26b23c23b59.zip | |
vgsp-sema: gate the pool-residue rule on the first translated pool read, not submissions (ISSUE-0002)
r70 c3 proved the submissions gate wrong: the content-rescue path consumes
entry 0 (submissions++) while the pool page is still untranslated (rrc=-2),
then the scanner's pin batch rewinds last_get (SVC_PIN_REWIND) and the entry
is decoded again - this time with cur=134 residue, pay=1, but submissions
already 1, so the residue branch was skipped, the hold branch deferred the
release, and the pending retry dropped it (payload <= cur). The client's
first tracker wait then never completed.
Replace the freshness gate with a per-channel pool_rel_seen flag set on the
first translated pool read (rrc2 == 0), persisted in the pump write-back. The
residue rule now fires exactly on that first read, exactly once per channel
per session.
Diffstat (limited to 'kernel/memory.c')
0 files changed, 0 insertions, 0 deletions
