Mirrored the init done for piix devices when xen is being used. This is needed for xen memory to be initialized and used with q35.
Signed-off-by: Joel Upham <jupham...@gmail.com> --- hw/i386/pc_q35.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 789a23ce6b..0b53a86dd2 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -145,6 +145,7 @@ static void pc_q35_init(MachineState *machine) MemoryRegion *system_io = get_system_io(); MemoryRegion *pci_memory; MemoryRegion *rom_memory; + MemoryRegion *ram_memory; GSIState *gsi_state; ISABus *isa_bus; int i; @@ -196,8 +197,12 @@ static void pc_q35_init(MachineState *machine) } pc_machine_init_sgx_epc(pcms); - x86_cpus_init(x86ms, pcmc->default_cpu_version); + x86_cpus_init(x86ms, pcmc->default_cpu_version); + if (xen_enabled()) { + xen_hvm_init_pc(pcms, &ram_memory); + machine->ram = ram_memory; + } kvmclock_create(pcmc->kvmclock_create_always); /* pci enabled */ @@ -230,7 +235,15 @@ static void pc_q35_init(MachineState *machine) } /* allocate ram and load rom/bios */ - pc_memory_init(pcms, system_memory, rom_memory, pci_hole64_size); + if (!xen_enabled()) + pc_memory_init(pcms, system_memory, rom_memory, pci_hole64_size); + else { + pc_system_flash_cleanup_unused(pcms); + if (machine->kernel_filename != NULL) { + /* For xen HVM direct kernel boot, load linux here */ + xen_load_linux(pcms); + } + } object_property_add_child(OBJECT(machine), "q35", OBJECT(q35_host)); object_property_set_link(OBJECT(q35_host), MCH_HOST_PROP_RAM_MEM, @@ -307,7 +320,7 @@ static void pc_q35_init(MachineState *machine) assert(pcms->vmport != ON_OFF_AUTO__MAX); if (pcms->vmport == ON_OFF_AUTO_AUTO) { - pcms->vmport = ON_OFF_AUTO_ON; + pcms->vmport = xen_enabled() ? ON_OFF_AUTO_OFF : ON_OFF_AUTO_ON; } /* init basic PC hardware */ -- 2.34.1