mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-14 07:20:42 +00:00
virtio-balloon: Check if balloon registration failed
Multiple balloon registrations are not allowed; check if the registration with the qemu balloon api succeeded. If not, fail the device init. Signed-off-by: Amit Shah <amit.shah@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
6c6ec1821a
commit
f76f665547
@ -269,6 +269,7 @@ static int virtio_balloon_load(QEMUFile *f, void *opaque, int version_id)
|
|||||||
VirtIODevice *virtio_balloon_init(DeviceState *dev)
|
VirtIODevice *virtio_balloon_init(DeviceState *dev)
|
||||||
{
|
{
|
||||||
VirtIOBalloon *s;
|
VirtIOBalloon *s;
|
||||||
|
int ret;
|
||||||
|
|
||||||
s = (VirtIOBalloon *)virtio_common_init("virtio-balloon",
|
s = (VirtIOBalloon *)virtio_common_init("virtio-balloon",
|
||||||
VIRTIO_ID_BALLOON,
|
VIRTIO_ID_BALLOON,
|
||||||
@ -278,12 +279,18 @@ VirtIODevice *virtio_balloon_init(DeviceState *dev)
|
|||||||
s->vdev.set_config = virtio_balloon_set_config;
|
s->vdev.set_config = virtio_balloon_set_config;
|
||||||
s->vdev.get_features = virtio_balloon_get_features;
|
s->vdev.get_features = virtio_balloon_get_features;
|
||||||
|
|
||||||
|
ret = qemu_add_balloon_handler(virtio_balloon_to_target,
|
||||||
|
virtio_balloon_stat, s);
|
||||||
|
if (ret < 0) {
|
||||||
|
virtio_cleanup(&s->vdev);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
s->ivq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
|
s->ivq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
|
||||||
s->dvq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
|
s->dvq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
|
||||||
s->svq = virtio_add_queue(&s->vdev, 128, virtio_balloon_receive_stats);
|
s->svq = virtio_add_queue(&s->vdev, 128, virtio_balloon_receive_stats);
|
||||||
|
|
||||||
reset_stats(s);
|
reset_stats(s);
|
||||||
qemu_add_balloon_handler(virtio_balloon_to_target, virtio_balloon_stat, s);
|
|
||||||
|
|
||||||
register_savevm(dev, "virtio-balloon", -1, 1,
|
register_savevm(dev, "virtio-balloon", -1, 1,
|
||||||
virtio_balloon_save, virtio_balloon_load, s);
|
virtio_balloon_save, virtio_balloon_load, s);
|
||||||
|
@ -788,6 +788,9 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev)
|
|||||||
VirtIODevice *vdev;
|
VirtIODevice *vdev;
|
||||||
|
|
||||||
vdev = virtio_balloon_init(&pci_dev->qdev);
|
vdev = virtio_balloon_init(&pci_dev->qdev);
|
||||||
|
if (!vdev) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
virtio_init_pci(proxy, vdev);
|
virtio_init_pci(proxy, vdev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user