]> git.proxmox.com Git - mirror_qemu.git/commitdiff
s390x: initialize virtio dev region
authorAlexander Graf <agraf@suse.de>
Thu, 10 Nov 2011 00:59:23 +0000 (01:59 +0100)
committerAlexander Graf <agraf@suse.de>
Mon, 14 Nov 2011 16:47:27 +0000 (17:47 +0100)
When running the s390x virtio machine we can potentially use uninitialized
memory for the virtio device backing ram. That can lead to weird breakge.

So let's better initialize it to 0 properly.

Reported-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
---

v1 -> v2:

  - use target_phys_addr_t

hw/s390-virtio.c

index 37945d5d8388c3e97f5d3c065728f386ae3206c1..61b67e8c3a428ed6158ba20c3428a0fe63c9eb52 100644 (file)
@@ -165,6 +165,9 @@ static void s390_init(ram_addr_t my_ram_size,
     ram_addr_t initrd_size = 0;
     int shift = 0;
     uint8_t *storage_keys;
+    void *virtio_region;
+    target_phys_addr_t virtio_region_len;
+    target_phys_addr_t virtio_region_start;
     int i;
 
     /* s390x ram size detection needs a 16bit multiplier + an increment. So
@@ -184,6 +187,15 @@ static void s390_init(ram_addr_t my_ram_size,
     memory_region_init_ram(ram, NULL, "s390.ram", my_ram_size);
     memory_region_add_subregion(sysmem, 0, ram);
 
+    /* clear virtio region */
+    virtio_region_len = my_ram_size - ram_size;
+    virtio_region_start = ram_size;
+    virtio_region = cpu_physical_memory_map(virtio_region_start,
+                                            &virtio_region_len, true);
+    memset(virtio_region, 0, virtio_region_len);
+    cpu_physical_memory_unmap(virtio_region, virtio_region_len, 1,
+                              virtio_region_len);
+
     /* allocate storage keys */
     storage_keys = g_malloc0(my_ram_size / TARGET_PAGE_SIZE);