Revision 73d604a4bc5641d38680dbac3e90e368db9549a3 authored by Kevin Wolf on 15 March 2024, 15:59:49 UTC, committed by Michael Tokarev on 27 March 2024, 06:39:28 UTC
VDUSE requires that virtqueues are first enabled before the DRIVER_OK
status flag is set; with the current API of the kernel module, it is
impossible to enable the opposite order in our block export code because
userspace is not notified when a virtqueue is enabled.

This requirement also mathces the normal initialisation order as done by
the generic vhost code in QEMU. However, commit 6c482547 accidentally
changed the order for vdpa-dev and broke access to VDUSE devices with
this.

This changes vdpa-dev to use the normal order again and use the standard
vhost callback .vhost_set_vring_enable for this. VDUSE devices can be
used with vdpa-dev again after this fix.

vhost_net intentionally avoided enabling the vrings for vdpa and does
this manually later while it does enable them for other vhost backends.
Reflect this in the vhost_net code and return early for vdpa, so that
the behaviour doesn't change for this device.

Cc: qemu-stable@nongnu.org
Fixes: 6c4825476a43 ('vdpa: move vhost_vdpa_set_vring_ready to the caller')
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20240315155949.86066-1-kwolf@redhat.com>
Reviewed-by: Eugenio Pérez <eperezma@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 2c66de61f88dc9620a32239f7dd61524a57f66b0)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
1 parent 784ebe5
History
File Mode Size
bdrv-next-monitor-owned.c -rw-r--r-- 135 bytes
blk-commit-all.c -rw-r--r-- 102 bytes
blk-exp-close-all.c -rw-r--r-- 156 bytes
blockdev-close-all-bdrv-states.c -rw-r--r-- 100 bytes
change-state-handler.c -rw-r--r-- 312 bytes
cmos.c -rw-r--r-- 117 bytes
colo-compare.c -rw-r--r-- 116 bytes
colo.c -rw-r--r-- 654 bytes
cpu-get-clock.c -rw-r--r-- 149 bytes
cpu-synchronize-state.c -rw-r--r-- 150 bytes
cpus-get-virtual-clock.c -rw-r--r-- 153 bytes
dump.c -rw-r--r-- 530 bytes
error-printf.c -rw-r--r-- 539 bytes
fdset.c -rw-r--r-- 266 bytes
fw_cfg.c -rw-r--r-- 428 bytes
gdbstub.c -rw-r--r-- 140 bytes
get-vm-name.c -rw-r--r-- 109 bytes
graph-lock.c -rw-r--r-- 150 bytes
icount.c -rw-r--r-- 735 bytes
io_uring.c -rw-r--r-- 603 bytes
iothread-lock-block.c -rw-r--r-- 158 bytes
iothread-lock.c -rw-r--r-- 224 bytes
is-daemonized.c -rw-r--r-- 130 bytes
isa-bus.c -rw-r--r-- 141 bytes
linux-aio.c -rw-r--r-- 605 bytes
memory_device.c -rw-r--r-- 352 bytes
meson.build -rw-r--r-- 2.2 KB
migr-blocker.c -rw-r--r-- 356 bytes
module-opts.c -rw-r--r-- 54 bytes
monitor-core.c -rw-r--r-- 421 bytes
monitor.c -rw-r--r-- 384 bytes
pci-bus.c -rw-r--r-- 152 bytes
physmem.c -rw-r--r-- 249 bytes
qdev.c -rw-r--r-- 664 bytes
qemu-timer-notify-cb.c -rw-r--r-- 173 bytes
qmp-command-available.c -rw-r--r-- 141 bytes
qmp-quit.c -rw-r--r-- 156 bytes
qtest.c -rw-r--r-- 431 bytes
ram-block.c -rw-r--r-- 554 bytes
ramfb.c -rw-r--r-- 301 bytes
replay-tools.c -rw-r--r-- 1.3 KB
replay.c -rw-r--r-- 347 bytes
runstate-check.c -rw-r--r-- 135 bytes
semihost-all.c -rw-r--r-- 339 bytes
semihost.c -rw-r--r-- 1.2 KB
sysbus.c -rw-r--r-- 107 bytes
target-get-monitor-def.c -rw-r--r-- 984 bytes
target-monitor-defs.c -rw-r--r-- 136 bytes
trace-control.c -rw-r--r-- 976 bytes
usb-dev-stub.c -rw-r--r-- 739 bytes
uuid.c -rw-r--r-- 235 bytes
virtio-md-pci.c -rw-r--r-- 719 bytes
vm-stop.c -rw-r--r-- 183 bytes
vmstate.c -rw-r--r-- 648 bytes
win32-kbd-hook.c -rw-r--r-- 340 bytes
xen-hw-stub.c -rw-r--r-- 843 bytes

back to top