Skip to content

Commit

Permalink
vdpa: move SVQ vring features check to net/
Browse files Browse the repository at this point in the history
The next patches will start control SVQ if possible. However, we don't
know if that will be possible at qemu boot anymore.

Since the moved checks will be already evaluated at net/ to know if it
is ok to shadow CVQ, move them.

Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20221215113144.322011-8-eperezma@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
eugpermar authored and mstsirkin committed Dec 21, 2022
1 parent a585fad commit 258a039
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 31 deletions.
32 changes: 2 additions & 30 deletions hw/virtio/vhost-vdpa.c
Expand Up @@ -389,29 +389,9 @@ static int vhost_vdpa_get_dev_features(struct vhost_dev *dev,
return ret;
}

static int vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v,
Error **errp)
static void vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v)
{
g_autoptr(GPtrArray) shadow_vqs = NULL;
uint64_t dev_features, svq_features;
int r;
bool ok;

if (!v->shadow_vqs_enabled) {
return 0;
}

r = vhost_vdpa_get_dev_features(hdev, &dev_features);
if (r != 0) {
error_setg_errno(errp, -r, "Can't get vdpa device features");
return r;
}

svq_features = dev_features;
ok = vhost_svq_valid_features(svq_features, errp);
if (unlikely(!ok)) {
return -1;
}

shadow_vqs = g_ptr_array_new_full(hdev->nvqs, vhost_svq_free);
for (unsigned n = 0; n < hdev->nvqs; ++n) {
Expand All @@ -422,7 +402,6 @@ static int vhost_vdpa_init_svq(struct vhost_dev *hdev, struct vhost_vdpa *v,
}

v->shadow_vqs = g_steal_pointer(&shadow_vqs);
return 0;
}

static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
Expand All @@ -447,10 +426,7 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
dev->opaque = opaque ;
v->listener = vhost_vdpa_memory_listener;
v->msg_type = VHOST_IOTLB_MSG_V2;
ret = vhost_vdpa_init_svq(dev, v, errp);
if (ret) {
goto err;
}
vhost_vdpa_init_svq(dev, v);

if (!vhost_vdpa_first_dev(dev)) {
return 0;
Expand All @@ -460,10 +436,6 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
VIRTIO_CONFIG_S_DRIVER);

return 0;

err:
ram_block_discard_disable(false);
return ret;
}

static void vhost_vdpa_host_notifier_uninit(struct vhost_dev *dev,
Expand Down
3 changes: 2 additions & 1 deletion net/vhost-vdpa.c
Expand Up @@ -118,9 +118,10 @@ static bool vhost_vdpa_net_valid_svq_features(uint64_t features, Error **errp)
if (invalid_dev_features) {
error_setg(errp, "vdpa svq does not work with features 0x%" PRIx64,
invalid_dev_features);
return false;
}

return !invalid_dev_features;
return vhost_svq_valid_features(features, errp);
}

static int vhost_vdpa_net_check_device_id(struct vhost_net *net)
Expand Down

0 comments on commit 258a039

Please sign in to comment.