mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
vdpa-dev: Fix initialisation order to restore VDUSE compatibility
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, commit6c482547
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:6c4825476a
('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>
This commit is contained in:
parent
d9e4070603
commit
2c66de61f8
5 changed files with 45 additions and 9 deletions
|
@ -541,6 +541,16 @@ int vhost_set_vring_enable(NetClientState *nc, int enable)
|
|||
VHostNetState *net = get_vhost_net(nc);
|
||||
const VhostOps *vhost_ops = net->dev.vhost_ops;
|
||||
|
||||
/*
|
||||
* vhost-vdpa network devices need to enable dataplane virtqueues after
|
||||
* DRIVER_OK, so they can recover device state before starting dataplane.
|
||||
* Because of that, we don't enable virtqueues here and leave it to
|
||||
* net/vhost-vdpa.c.
|
||||
*/
|
||||
if (nc->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
nc->vring_enable = enable;
|
||||
|
||||
if (vhost_ops && vhost_ops->vhost_set_vring_enable) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue