Skip to content

Commit

Permalink
hw/virtio: move vm_running check to virtio_device_started
Browse files Browse the repository at this point in the history
All the boilerplate virtio code does the same thing (or should at
least) of checking to see if the VM is running before attempting to
start VirtIO. Push the logic up to the common function to avoid
getting a copy and paste wrong.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220802095010.3330793-11-alex.bennee@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
stsquad authored and mstsirkin committed Oct 7, 2022
1 parent a276123 commit 9f6bcfd
Show file tree
Hide file tree
Showing 6 changed files with 10 additions and 25 deletions.
6 changes: 1 addition & 5 deletions hw/virtio/vhost-user-fs.c
Expand Up @@ -122,11 +122,7 @@ static void vuf_stop(VirtIODevice *vdev)
static void vuf_set_status(VirtIODevice *vdev, uint8_t status)
{
VHostUserFS *fs = VHOST_USER_FS(vdev);
bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;

if (!vdev->vm_running) {
should_start = false;
}
bool should_start = virtio_device_started(vdev, status);

if (fs->vhost_dev.started == should_start) {
return;
Expand Down
6 changes: 1 addition & 5 deletions hw/virtio/vhost-user-i2c.c
Expand Up @@ -93,11 +93,7 @@ static void vu_i2c_stop(VirtIODevice *vdev)
static void vu_i2c_set_status(VirtIODevice *vdev, uint8_t status)
{
VHostUserI2C *i2c = VHOST_USER_I2C(vdev);
bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;

if (!vdev->vm_running) {
should_start = false;
}
bool should_start = virtio_device_started(vdev, status);

if (i2c->vhost_dev.started == should_start) {
return;
Expand Down
6 changes: 1 addition & 5 deletions hw/virtio/vhost-user-rng.c
Expand Up @@ -90,11 +90,7 @@ static void vu_rng_stop(VirtIODevice *vdev)
static void vu_rng_set_status(VirtIODevice *vdev, uint8_t status)
{
VHostUserRNG *rng = VHOST_USER_RNG(vdev);
bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;

if (!vdev->vm_running) {
should_start = false;
}
bool should_start = virtio_device_started(vdev, status);

if (rng->vhost_dev.started == should_start) {
return;
Expand Down
6 changes: 1 addition & 5 deletions hw/virtio/vhost-user-vsock.c
Expand Up @@ -55,11 +55,7 @@ const VhostDevConfigOps vsock_ops = {
static void vuv_set_status(VirtIODevice *vdev, uint8_t status)
{
VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;

if (!vdev->vm_running) {
should_start = false;
}
bool should_start = virtio_device_started(vdev, status);

if (vvc->vhost_dev.started == should_start) {
return;
Expand Down
6 changes: 1 addition & 5 deletions hw/virtio/vhost-vsock.c
Expand Up @@ -70,13 +70,9 @@ static int vhost_vsock_set_running(VirtIODevice *vdev, int start)
static void vhost_vsock_set_status(VirtIODevice *vdev, uint8_t status)
{
VHostVSockCommon *vvc = VHOST_VSOCK_COMMON(vdev);
bool should_start = status & VIRTIO_CONFIG_S_DRIVER_OK;
bool should_start = virtio_device_started(vdev, status);
int ret;

if (!vdev->vm_running) {
should_start = false;
}

if (vvc->vhost_dev.started == should_start) {
return;
}
Expand Down
5 changes: 5 additions & 0 deletions include/hw/virtio/virtio.h
Expand Up @@ -100,6 +100,7 @@ struct VirtIODevice
VirtQueue *vq;
MemoryListener listener;
uint16_t device_id;
/* @vm_running: current VM running state via virtio_vmstate_change() */
bool vm_running;
bool broken; /* device in invalid state, needs reset */
bool use_disabled_flag; /* allow use of 'disable' flag when needed */
Expand Down Expand Up @@ -376,6 +377,10 @@ static inline bool virtio_device_started(VirtIODevice *vdev, uint8_t status)
return vdev->started;
}

if (!vdev->vm_running) {
return false;
}

return status & VIRTIO_CONFIG_S_DRIVER_OK;
}

Expand Down

0 comments on commit 9f6bcfd

Please sign in to comment.