The nested event loop was introduced in QEMU 6.0 to allow servicing of requests coming from the slave channel while waiting for an ack from the back-end on the master socket. It turns out this is fragile and breaks if the servicing of the slave channel causes a new message to be sent on the master socket. This is exactly what happens when using DPDK as reported in [0].
The only identified user for the nested loop is DAX enablement that isn't upstream yet. Just drop the code for now. Some more clever solution should be designed when the need to service concurrent requests from both channels arises again. Greg Kurz (2): Revert "vhost-user: Monitor slave channel in vhost_user_read()" Revert "vhost-user: Introduce nested event loop in vhost_user_read()" hw/virtio/vhost-user.c | 100 ++++------------------------------------- 1 file changed, 8 insertions(+), 92 deletions(-) -- 2.39.0