mirror of
https://github.com/qemu/qemu.git
synced 2025-01-22 21:44:07 +08:00
vhost-vdpa: stick to -errno error return convention
Almost all VhostOps methods in vdpa_ops follow the convention of returning negated errno on error. Adjust the few that don't. To that end, rework vhost_vdpa_add_status to check if setting of the requested status bits has succeeded and return the respective error code it hasn't, and propagate the error codes wherever it's appropriate. Signed-off-by: Roman Kagan <rvkagan@yandex-team.ru> Message-Id: <20211111153354.18807-8-rvkagan@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
2d88d9c65c
commit
3631151b3e
@ -292,18 +292,34 @@ static int vhost_vdpa_call(struct vhost_dev *dev, unsigned long int request,
|
|||||||
return ret < 0 ? -errno : ret;
|
return ret < 0 ? -errno : ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vhost_vdpa_add_status(struct vhost_dev *dev, uint8_t status)
|
static int vhost_vdpa_add_status(struct vhost_dev *dev, uint8_t status)
|
||||||
{
|
{
|
||||||
uint8_t s;
|
uint8_t s;
|
||||||
|
int ret;
|
||||||
|
|
||||||
trace_vhost_vdpa_add_status(dev, status);
|
trace_vhost_vdpa_add_status(dev, status);
|
||||||
if (vhost_vdpa_call(dev, VHOST_VDPA_GET_STATUS, &s)) {
|
ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_STATUS, &s);
|
||||||
return;
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
s |= status;
|
s |= status;
|
||||||
|
|
||||||
vhost_vdpa_call(dev, VHOST_VDPA_SET_STATUS, &s);
|
ret = vhost_vdpa_call(dev, VHOST_VDPA_SET_STATUS, &s);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = vhost_vdpa_call(dev, VHOST_VDPA_GET_STATUS, &s);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(s & status)) {
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vhost_vdpa_get_iova_range(struct vhost_vdpa *v)
|
static void vhost_vdpa_get_iova_range(struct vhost_vdpa *v)
|
||||||
@ -484,7 +500,7 @@ static int vhost_vdpa_set_mem_table(struct vhost_dev *dev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mem->padding) {
|
if (mem->padding) {
|
||||||
return -1;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -501,14 +517,11 @@ static int vhost_vdpa_set_features(struct vhost_dev *dev,
|
|||||||
|
|
||||||
trace_vhost_vdpa_set_features(dev, features);
|
trace_vhost_vdpa_set_features(dev, features);
|
||||||
ret = vhost_vdpa_call(dev, VHOST_SET_FEATURES, &features);
|
ret = vhost_vdpa_call(dev, VHOST_SET_FEATURES, &features);
|
||||||
uint8_t status = 0;
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK);
|
|
||||||
vhost_vdpa_call(dev, VHOST_VDPA_GET_STATUS, &status);
|
|
||||||
|
|
||||||
return !(status & VIRTIO_CONFIG_S_FEATURES_OK);
|
return vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vhost_vdpa_set_backend_cap(struct vhost_dev *dev)
|
static int vhost_vdpa_set_backend_cap(struct vhost_dev *dev)
|
||||||
@ -650,12 +663,8 @@ static int vhost_vdpa_dev_start(struct vhost_dev *dev, bool started)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (started) {
|
if (started) {
|
||||||
uint8_t status = 0;
|
|
||||||
memory_listener_register(&v->listener, &address_space_memory);
|
memory_listener_register(&v->listener, &address_space_memory);
|
||||||
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
|
return vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK);
|
||||||
vhost_vdpa_call(dev, VHOST_VDPA_GET_STATUS, &status);
|
|
||||||
|
|
||||||
return !(status & VIRTIO_CONFIG_S_DRIVER_OK);
|
|
||||||
} else {
|
} else {
|
||||||
vhost_vdpa_reset_device(dev);
|
vhost_vdpa_reset_device(dev);
|
||||||
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE |
|
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE |
|
||||||
|
Loading…
Reference in New Issue
Block a user