On 10.11.2011, at 02:36, Peter Maydell wrote: > On 10 November 2011 01:19, Alexander Graf <ag...@suse.de> wrote: >> @@ -184,6 +186,13 @@ 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 = cpu_physical_memory_map(ram_size, &virtio_region_len, >> true); >> + memset(virtio_region, 0, virtio_region_len); >> + cpu_physical_memory_unmap(virtio_region, virtio_region_len, 1, >> + virtio_region_len); >> + > > This looks a bit fishy -- cpu_physical_memory_map() takes a > target_phys_addr_t but you're passing it a ram_addr_t.
Meh. Always those types ... :) > Also isn't this second-guessing the ram_addr_t of the region allocated > inside memory_region_init_ram() ? Not sure I understand? On s390-virtio we have to following ram layout: [ ----- RAM ---- | --- virtio device structs --- ] The size of the latter is added to my_ram_size by s390_virtio_bus_init. All I'm trying to do is make sure that this latter part of RAM is always 0, while the first part can still be dynamically allocated. Alex