]> git.proxmox.com Git - qemu.git/blobdiff - hw/virtio/virtio-balloon.c
Merge git://github.com/hw-claudio/qemu-aarch64-queue into tcg-next
[qemu.git] / hw / virtio / virtio-balloon.c
index 76e32ceef8ef27a91f6f628d800a41149ca13da2..3fa72a97b9dfb24e0339a33f7044431b80f4b679 100644 (file)
@@ -197,7 +197,7 @@ static void virtio_balloon_handle_output(VirtIODevice *vdev, VirtQueue *vq)
 
             /* FIXME: remove get_system_memory(), but how? */
             section = memory_region_find(get_system_memory(), pa, 1);
-            if (!section.size || !memory_region_is_ram(section.mr))
+            if (!int128_nz(section.size) || !memory_region_is_ram(section.mr))
                 continue;
 
             /* Using memory_region_get_ram_ptr is bending the rules a bit, but
@@ -205,6 +205,7 @@ static void virtio_balloon_handle_output(VirtIODevice *vdev, VirtQueue *vq)
             addr = section.offset_within_region;
             balloon_page(memory_region_get_ram_ptr(section.mr) + addr,
                          !!(vq == s->dvq));
+            memory_region_unref(section.mr);
         }
 
         virtqueue_push(vq, &elem, offset);
@@ -344,15 +345,11 @@ static int virtio_balloon_device_init(VirtIODevice *vdev)
 
     virtio_init(vdev, "virtio-balloon", VIRTIO_ID_BALLOON, 8);
 
-    vdev->get_config = virtio_balloon_get_config;
-    vdev->set_config = virtio_balloon_set_config;
-    vdev->get_features = virtio_balloon_get_features;
-
     ret = qemu_add_balloon_handler(virtio_balloon_to_target,
                                    virtio_balloon_stat, s);
 
     if (ret < 0) {
-        virtio_common_cleanup(VIRTIO_DEVICE(s));
+        virtio_cleanup(VIRTIO_DEVICE(s));
         return -1;
     }
 
@@ -381,7 +378,7 @@ static int virtio_balloon_device_exit(DeviceState *qdev)
     balloon_stats_destroy_timer(s);
     qemu_remove_balloon_handler(s);
     unregister_savevm(qdev, "virtio-balloon", s);
-    virtio_common_cleanup(vdev);
+    virtio_cleanup(vdev);
     return 0;
 }