This reordering makes the vmstate_virtio_net available for use by future virtio-net SaveVMHandlers hooks that will need to be placed before virtio_net_device_realize.
Signed-off-by: Jonah Palmer <jonah.pal...@oracle.com> --- hw/net/virtio-net.c | 90 ++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 221252e00a..93029104b3 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -3746,6 +3746,51 @@ static bool failover_hide_primary_device(DeviceListener *listener, return qatomic_read(&n->failover_primary_hidden); } +static int virtio_net_pre_save(void *opaque) +{ + VirtIONet *n = opaque; + + /* At this point, backend must be stopped, otherwise + * it might keep writing to memory. */ + assert(!n->vhost_started); + + return 0; +} + +static bool primary_unplug_pending(void *opaque) +{ + DeviceState *dev = opaque; + DeviceState *primary; + VirtIODevice *vdev = VIRTIO_DEVICE(dev); + VirtIONet *n = VIRTIO_NET(vdev); + + if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_STANDBY)) { + return false; + } + primary = failover_find_primary_device(n); + return primary ? primary->pending_deleted_event : false; +} + +static bool dev_unplug_pending(void *opaque) +{ + DeviceState *dev = opaque; + VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(dev); + + return vdc->primary_unplug_pending(dev); +} + +static const VMStateDescription vmstate_virtio_net = { + .name = "virtio-net", + .minimum_version_id = VIRTIO_NET_VM_VERSION, + .version_id = VIRTIO_NET_VM_VERSION, + .fields = (const VMStateField[]) { + VMSTATE_VIRTIO_DEVICE, + VMSTATE_END_OF_LIST() + }, + .pre_save = virtio_net_pre_save, + .dev_unplug_pending = dev_unplug_pending, +}; + static void virtio_net_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev = VIRTIO_DEVICE(dev); @@ -4016,51 +4061,6 @@ static void virtio_net_instance_init(Object *obj) ebpf_rss_init(&n->ebpf_rss); } -static int virtio_net_pre_save(void *opaque) -{ - VirtIONet *n = opaque; - - /* At this point, backend must be stopped, otherwise - * it might keep writing to memory. */ - assert(!n->vhost_started); - - return 0; -} - -static bool primary_unplug_pending(void *opaque) -{ - DeviceState *dev = opaque; - DeviceState *primary; - VirtIODevice *vdev = VIRTIO_DEVICE(dev); - VirtIONet *n = VIRTIO_NET(vdev); - - if (!virtio_vdev_has_feature(vdev, VIRTIO_NET_F_STANDBY)) { - return false; - } - primary = failover_find_primary_device(n); - return primary ? primary->pending_deleted_event : false; -} - -static bool dev_unplug_pending(void *opaque) -{ - DeviceState *dev = opaque; - VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(dev); - - return vdc->primary_unplug_pending(dev); -} - -static const VMStateDescription vmstate_virtio_net = { - .name = "virtio-net", - .minimum_version_id = VIRTIO_NET_VM_VERSION, - .version_id = VIRTIO_NET_VM_VERSION, - .fields = (const VMStateField[]) { - VMSTATE_VIRTIO_DEVICE, - VMSTATE_END_OF_LIST() - }, - .pre_save = virtio_net_pre_save, - .dev_unplug_pending = dev_unplug_pending, -}; - static const Property virtio_net_properties[] = { DEFINE_PROP_BIT64("csum", VirtIONet, host_features, VIRTIO_NET_F_CSUM, true), -- 2.47.1