From: Avi Kivity Date: Tue, 6 Mar 2012 15:50:10 +0000 (+0200) Subject: kvmvapic: align start address as well as size X-Git-Tag: v1.1-rc0~233 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9512e4a9edef2d9b59eb10a03184cd90a34f62d5;p=thirdparty%2Fqemu.git kvmvapic: align start address as well as size The kvmvapic code remaps a section of ROM as RAM to allow the guest to maintain state there. It is careful to align the section size to a page boundary, to avoid creating subpages, but neglects to do the same for the start address. These leads to an assert later on when the memory core tries to create a page which is half RAM and half ROM. Fix by aligning the start address to a page boundary. This can be triggered by running qemu-system-x86_64 -enable-kvm -vga none. Signed-off-by: Avi Kivity Signed-off-by: Anthony Liguori --- diff --git a/hw/kvmvapic.c b/hw/kvmvapic.c index 36ccfbcdbdf..e8bfeec3de2 100644 --- a/hw/kvmvapic.c +++ b/hw/kvmvapic.c @@ -578,8 +578,10 @@ static void vapic_map_rom_writable(VAPICROMState *s) rom_size = ram[rom_paddr + 2] * ROM_BLOCK_SIZE; s->rom_size = rom_size; - /* We need to round up to avoid creating subpages + /* We need to round to avoid creating subpages * from which we cannot run code. */ + rom_size += rom_paddr & ~TARGET_PAGE_MASK; + rom_paddr &= TARGET_PAGE_MASK; rom_size = TARGET_PAGE_ALIGN(rom_size); memory_region_init_alias(&s->rom, "kvmvapic-rom", section.mr, rom_paddr,