Commit 3786cff5 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

virtio-net: switch exit callback to VirtioDeviceClass



This ensures hot-unplug is handled properly by the proxy, and avoids
leaking bus_name which is freed by virtio_device_exit.

Cc: qemu-stable@nongnu.org
Acked-by: default avatarAndreas Faerber <afaerber@suse.de>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 0e86c13f
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -1570,16 +1570,15 @@ static int virtio_net_device_init(VirtIODevice *vdev)
    return 0;
}

static int virtio_net_device_exit(DeviceState *qdev)
static void virtio_net_device_exit(VirtIODevice *vdev)
{
    VirtIONet *n = VIRTIO_NET(qdev);
    VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
    VirtIONet *n = VIRTIO_NET(vdev);
    int i;

    /* This will stop vhost backend if appropriate. */
    virtio_net_set_status(vdev, 0);

    unregister_savevm(qdev, "virtio-net", n);
    unregister_savevm(DEVICE(vdev), "virtio-net", n);

    if (n->netclient_name) {
        g_free(n->netclient_name);
@@ -1610,8 +1609,6 @@ static int virtio_net_device_exit(DeviceState *qdev)
    g_free(n->vqs);
    qemu_del_nic(n->nic);
    virtio_cleanup(vdev);

    return 0;
}

static void virtio_net_instance_init(Object *obj)
@@ -1638,10 +1635,10 @@ static void virtio_net_class_init(ObjectClass *klass, void *data)
{
    DeviceClass *dc = DEVICE_CLASS(klass);
    VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
    dc->exit = virtio_net_device_exit;
    dc->props = virtio_net_properties;
    set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
    vdc->init = virtio_net_device_init;
    vdc->exit = virtio_net_device_exit;
    vdc->get_config = virtio_net_get_config;
    vdc->set_config = virtio_net_set_config;
    vdc->get_features = virtio_net_get_features;