diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-29 14:25:05 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-29 14:25:05 -0400 |
| commit | dd1135ced1b1e5390034239086784a44bd2fca20 (patch) | |
| tree | 9c1f2d69c877ec1954a0cb4908ef019a81d28248 /kernel/bar_init.c | |
| parent | c8905ec29b4a5b26053e5e315504b2202817d786 (diff) | |
| download | open-iov-dd1135ced1b1e5390034239086784a44bd2fca20.tar.gz open-iov-dd1135ced1b1e5390034239086784a44bd2fca20.zip | |
kernel: batch the map-add channel rewind; trust injected streams for ops
Two fixes for the CE data path. (1) svc_handle_map_add rewound every
channel by 8 ring entries on every injected mapping; a 16 MB push-buffer pin
is thousands of page injections, so the pump's last_get was pinned in place
and it re-read the same entries for the whole batch (3645 submissions, zero
ops). The rewind now runs once per drained batch. (2) The push-start
heuristic (op=INC_METHOD at address 0) rejects UVM's real CE memop pushes,
which start with an IMM method at address 8 (observed 0x60020002, PTE data
words) or a release method at 0x700 (0x200381c0); a buffer read through a
host-injected (ipin) translation is now decoded fully trusted, ops included.
Result on the next boot: memset=2718/0/0 ringops=1794 (first sustained CE
work), false 12k->1.9k. semfix_watch: bulk-pin contiguous runs via
sema_map_add len, read rm_mem size, 16 MB (4096 page) cap, non-blocking QMP
read (the fixed 30 ms sleep made 4096 gva2gpa calls take two minutes), and
KEEP_TRACE=1 to preserve the guest trace for post-mortems.
Diffstat (limited to 'kernel/bar_init.c')
0 files changed, 0 insertions, 0 deletions
