diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-09 21:55:10 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-09 21:55:10 -0400 |
| commit | 3b063e2fc846b367b2d782d04ec9588078a3ae26 (patch) | |
| tree | 1e5f0a157b5527a90e758c987603e46310f75d2e /kernel/tests/Makefile | |
| parent | d0ae432ade6941a705875b9db2a9d26b23c23b59 (diff) | |
| download | open-iov-3b063e2fc846b367b2d782d04ec9588078a3ae26.tar.gz open-iov-3b063e2fc846b367b2d782d04ec9588078a3ae26.zip | |
vgsp-sema: hold an entry on ANY failed op, not only an unresolvable operand (ISSUE-0002)
r71 c3 reached the pma scrub and froze in scrubCheckAndWaitForSize: three
vidmem memsets (1 MiB / 297 KiB / 608 KiB) failed with -EINVAL because
svc_op_translate resolved their client-VA destinations through a walk to an
out-of-bounds vidmem translation before the scanner pinned the real sysmem
pages. Only svc_op_translate's own failure sets op_tr_pending, so the pump
consumed the entry and applied the release while the memset work was lost.
svc_run_ops now marks the pass op-pending for any op that did not run
(rc != 0, rc != SVC_COPY_FORWARDED): the pump holds the entry and withholds
its releases (bounded by SVC_OPDEF_HOLD_MS) so the retried decode picks up
the injected pin and runs the memset; on expiry the release is flushed and
the op stays skipped, exactly like the -ENOENT path. Sessions with no failed
ops (c1/c2 were 0 fails in r71) are unaffected.
Diffstat (limited to 'kernel/tests/Makefile')
0 files changed, 0 insertions, 0 deletions
