Message ID | 20250410122643.1747913-1-manos.pitsidianakis@linaro.org (mailing list archive) |
---|---|
Headers | show |
Series | virtio-gpu: fix blob unmapping sequence | expand |
Manos Pitsidianakis <manos.pitsidianakis@linaro.org> writes: > A hang was observed when running a small kernel that exercised VIRTIO > GPU under TCG. This is an edge-case and won't happen under typical > conditions. Should I (or MST?) pull these into a tree for 10.0 or should they be grabbed for when the tree opens with a Cc qemu-stable? > > When unmapping a blob object, its MemoryRegion's freeing is deferred to > the RCU thread. The hang's cause was determined to be a busy main loop > not allowing for the RCU thread to run because the kernel did not setup > any timers or had any interrupts on the way. While fixing the RCU thread > to run even if the guest CPU spins is a solution, it's easier to fix the > reason why the MemoryRegion isn't freed from the main loop instead. > > While at it, also restructure the 3 stage cleanup to immediately respond > to the guest if the MR happened to have had no other reference. > > PS: The hang can be reproduced by running this unikernel with TCG > > https://git.codelinaro.org/manos.pitsidianakis/virtio-tests/-/tree/8c0ebe9395827e24aa5711186d499bf5de87cf63/virtio-test-suite > > v1 to v2: > - Add patch by Alex to prevent double-free when FlatView is destroyed > from RCU thread. > > Alex Bennée (1): > hw/display: re-arrange memory region tracking > > Manos Pitsidianakis (2): > virtio-gpu: fix hang under TCG when unmapping blob > virtio-gpu: refactor async blob unmapping > > include/exec/memory.h | 1 + > hw/display/virtio-gpu-virgl.c | 60 ++++++++++++++++++++--------------- > 2 files changed, 35 insertions(+), 26 deletions(-) > > > base-commit: 56c6e249b6988c1b6edc2dd34ebb0f1e570a1365