summaryrefslogtreecommitdiffstats
path: root/kernel/include
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-29 14:25:05 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-29 14:25:05 -0400
commitbe46061c66690752bf03aaaf4d72e4fa2b5f418d (patch)
tree7941d7e4c6930d0bf697ddd7b037f7990a6bfc25 /kernel/include
parent1af6fd4562dfcc40a77f54b2523c9a7199a2c063 (diff)
downloadopen-iov-be46061c66690752bf03aaaf4d72e4fa2b5f418d.tar.gz
open-iov-be46061c66690752bf03aaaf4d72e4fa2b5f418d.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/include')
0 files changed, 0 insertions, 0 deletions