@@ -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 */
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 <jupham125@gmail.com> --- hw/i386/pc_q35.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)