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)
|
||||
{
|
||||
VirtIOBalloon *s;
|
||||
int ret;
|
||||
|
||||
s = (VirtIOBalloon *)virtio_common_init("virtio-balloon",
|
||||
VIRTIO_ID_BALLOON,
|
||||
@ -278,12 +279,18 @@ VirtIODevice *virtio_balloon_init(DeviceState *dev)
|
||||
s->vdev.set_config = virtio_balloon_set_config;
|
||||
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->dvq = virtio_add_queue(&s->vdev, 128, virtio_balloon_handle_output);
|
||||
s->svq = virtio_add_queue(&s->vdev, 128, virtio_balloon_receive_stats);
|
||||
|
||||
reset_stats(s);
|
||||
qemu_add_balloon_handler(virtio_balloon_to_target, virtio_balloon_stat, s);
|
||||
|
||||
register_savevm(dev, "virtio-balloon", -1, 1,
|
||||
virtio_balloon_save, virtio_balloon_load, s);
|
||||
|
@ -788,6 +788,9 @@ static int virtio_balloon_init_pci(PCIDevice *pci_dev)
|
||||
VirtIODevice *vdev;
|
||||
|
||||
vdev = virtio_balloon_init(&pci_dev->qdev);
|
||||
if (!vdev) {
|
||||
return -1;
|
||||
}
|
||||
virtio_init_pci(proxy, vdev);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user