Message ID | 1449010688-19205-2-git-send-email-ehabkost@redhat.com |
---|---|
State | New |
Headers | show |
On 12/02/2015 12:58 AM, Eduardo Habkost wrote: > This way the compat flags can be initialized in the machine_options() > function. This will help us to eventually eliminate the pc_compat_*() > functions. Hi, I have only a minor comment here, > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > --- > hw/i386/pc.c | 8 +++++ > hw/i386/pc_piix.c | 84 +++++++++++++++++++++++++--------------------------- > hw/i386/pc_q35.c | 54 +++++++++++++++------------------ > include/hw/i386/pc.h | 14 +++++++++ > 4 files changed, 86 insertions(+), 74 deletions(-) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 5e20e07..129aa04 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1952,6 +1952,14 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) > HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); > > pcmc->get_hotplug_handler = mc->get_hotplug_handler; > + pcmc->pci_enabled = true; > + pcmc->has_acpi_build = true; > + pcmc->rsdp_in_ram = true; > + pcmc->smbios_defaults = true; > + pcmc->smbios_uuid_encoded = true; > + pcmc->gigabyte_align = true; > + pcmc->has_reserved_memory = true; > + pcmc->kvmclock_enabled = true; > mc->get_hotplug_handler = pc_get_hotpug_handler; > mc->cpu_index_to_socket_id = pc_cpu_index_to_socket_id; > mc->default_boot_order = "cad"; > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index 2e41efe..7a7f748 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -60,26 +60,14 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 }; > static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; > static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; > > -static bool pci_enabled = true; > -static bool has_acpi_build = true; > -static bool rsdp_in_ram = true; > static int legacy_acpi_table_size; > -static bool smbios_defaults = true; > -static bool smbios_legacy_mode; > -static bool smbios_uuid_encoded = true; > -/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to > - * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte > - * pages in the host. > - */ > -static bool gigabyte_align = true; > -static bool has_reserved_memory = true; > -static bool kvmclock_enabled = true; > > /* PC hardware initialisation */ > static void pc_init1(MachineState *machine, > const char *host_type, const char *pci_type) > { > PCMachineState *pcms = PC_MACHINE(machine); > + PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); > MemoryRegion *system_memory = get_system_memory(); > MemoryRegion *system_io = get_system_io(); > int i; > @@ -108,7 +96,7 @@ static void pc_init1(MachineState *machine, > * breaking migration. > */ > if (machine->ram_size >= 0xe0000000) { > - lowmem = gigabyte_align ? 0xc0000000 : 0xe0000000; > + lowmem = pcmc->gigabyte_align ? 0xc0000000 : 0xe0000000; > } else { > lowmem = 0xe0000000; > } > @@ -141,11 +129,11 @@ static void pc_init1(MachineState *machine, > > pc_cpus_init(pcms); > > - if (kvm_enabled() && kvmclock_enabled) { > + if (kvm_enabled() && pcmc->kvmclock_enabled) { > kvmclock_create(); > } > > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > pci_memory = g_new(MemoryRegion, 1); > memory_region_init(pci_memory, NULL, "pci", UINT64_MAX); > rom_memory = pci_memory; > @@ -156,18 +144,19 @@ static void pc_init1(MachineState *machine, > > guest_info = pc_guest_info_init(pcms); > > - guest_info->has_acpi_build = has_acpi_build; > + guest_info->has_acpi_build = pcmc->has_acpi_build; > guest_info->legacy_acpi_table_size = legacy_acpi_table_size; Why is legacy_acpi_table_size left behind? Maybe it is a new field. Thanks, Marcel > > - guest_info->isapc_ram_fw = !pci_enabled; > - guest_info->has_reserved_memory = has_reserved_memory; > - guest_info->rsdp_in_ram = rsdp_in_ram; > + guest_info->isapc_ram_fw = !pcmc->pci_enabled; > + guest_info->has_reserved_memory = pcmc->has_reserved_memory; > + guest_info->rsdp_in_ram = pcmc->rsdp_in_ram; > > - if (smbios_defaults) { > + if (pcmc->smbios_defaults) { > MachineClass *mc = MACHINE_GET_CLASS(machine); > /* These values are guest ABI, do not change */ > smbios_set_defaults("QEMU", "Standard PC (i440FX + PIIX, 1996)", > - mc->name, smbios_legacy_mode, smbios_uuid_encoded, > + mc->name, pcmc->smbios_legacy_mode, > + pcmc->smbios_uuid_encoded, > SMBIOS_ENTRY_POINT_21); > } > > @@ -182,14 +171,14 @@ static void pc_init1(MachineState *machine, > > gsi_state = g_malloc0(sizeof(*gsi_state)); > if (kvm_irqchip_in_kernel()) { > - kvm_pc_setup_irq_routing(pci_enabled); > + kvm_pc_setup_irq_routing(pcmc->pci_enabled); > gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state, > GSI_NUM_PINS); > } else { > gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS); > } > > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > pci_bus = i440fx_init(host_type, > pci_type, > &i440fx_state, &piix3_devfn, &isa_bus, gsi, > @@ -217,13 +206,13 @@ static void pc_init1(MachineState *machine, > gsi_state->i8259_irq[i] = i8259[i]; > } > g_free(i8259); > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > ioapic_init_gsi(gsi_state, "i440fx"); > } > > pc_register_ferr_irq(gsi[13]); > > - pc_vga_init(isa_bus, pci_enabled ? pci_bus : NULL); > + pc_vga_init(isa_bus, pcmc->pci_enabled ? pci_bus : NULL); > > assert(pcms->vmport != ON_OFF_AUTO_MAX); > if (pcms->vmport == ON_OFF_AUTO_AUTO) { > @@ -237,7 +226,7 @@ static void pc_init1(MachineState *machine, > pc_nic_init(isa_bus, pci_bus); > > ide_drive_get(hd, ARRAY_SIZE(hd)); > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > PCIDevice *dev; > if (xen_enabled()) { > dev = pci_piix3_xen_ide_init(pci_bus, hd, piix3_devfn + 1); > @@ -264,11 +253,11 @@ static void pc_init1(MachineState *machine, > > pc_cmos_init(pcms, idebus[0], idebus[1], rtc_state); > > - if (pci_enabled && usb_enabled()) { > + if (pcmc->pci_enabled && usb_enabled()) { > pci_create_simple(pci_bus, piix3_devfn + 2, "piix3-usb-uhci"); > } > > - if (pci_enabled && acpi_enabled) { > + if (pcmc->pci_enabled && acpi_enabled) { > DeviceState *piix4_pm; > I2CBus *smbus; > > @@ -289,7 +278,7 @@ static void pc_init1(MachineState *machine, > PC_MACHINE_ACPI_DEVICE_PROP, &error_abort); > } > > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > pc_pci_device_init(pci_bus); > } > } > @@ -315,7 +304,6 @@ static void pc_compat_2_3(MachineState *machine) > static void pc_compat_2_2(MachineState *machine) > { > pc_compat_2_3(machine); > - rsdp_in_ram = false; > machine->suppress_vmdesc = true; > } > > @@ -324,7 +312,6 @@ static void pc_compat_2_1(MachineState *machine) > PCMachineState *pcms = PC_MACHINE(machine); > > pc_compat_2_2(machine); > - smbios_uuid_encoded = false; > x86_cpu_change_kvm_default("svm", NULL); > pcms->enforce_aligned_dimm = false; > } > @@ -349,16 +336,12 @@ static void pc_compat_2_0(MachineState *machine) > * QEMU 1.7 it is 6414. For RHEL/CentOS 7.0 it is 6418. > */ > legacy_acpi_table_size = 6652; > - smbios_legacy_mode = true; > - has_reserved_memory = false; > pc_set_legacy_acpi_data_size(); > } > > static void pc_compat_1_7(MachineState *machine) > { > pc_compat_2_0(machine); > - smbios_defaults = false; > - gigabyte_align = false; > option_rom_has_mr = true; > legacy_acpi_table_size = 6414; > x86_cpu_change_kvm_default("x2apic", NULL); > @@ -368,7 +351,6 @@ static void pc_compat_1_6(MachineState *machine) > { > pc_compat_1_7(machine); > rom_file_has_mr = false; > - has_acpi_build = false; > } > > static void pc_compat_1_5(MachineState *machine) > @@ -398,17 +380,10 @@ static void pc_compat_1_2(MachineState *machine) > static void pc_compat_0_13(MachineState *machine) > { > pc_compat_1_2(machine); > - kvmclock_enabled = false; > } > > static void pc_init_isa(MachineState *machine) > { > - pci_enabled = false; > - has_acpi_build = false; > - smbios_defaults = false; > - gigabyte_align = false; > - smbios_legacy_mode = true; > - has_reserved_memory = false; > option_rom_has_mr = true; > rom_file_has_mr = false; > if (!machine->cpu_model) { > @@ -510,9 +485,11 @@ DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3, > > static void pc_i440fx_2_2_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_2_3_machine_options(m); > m->hw_version = "2.2.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_2); > + pcmc->rsdp_in_ram = false; > } > > DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2, > @@ -521,10 +498,12 @@ DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2, > > static void pc_i440fx_2_1_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_2_2_machine_options(m); > m->hw_version = "2.1.0"; > m->default_display = NULL; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_1); > + pcmc->smbios_uuid_encoded = false; > } > > DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1, > @@ -534,9 +513,12 @@ DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1, > > static void pc_i440fx_2_0_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_2_1_machine_options(m); > m->hw_version = "2.0.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_0); > + pcmc->smbios_legacy_mode = true; > + pcmc->has_reserved_memory = false; > } > > DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0, > @@ -545,10 +527,13 @@ DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0, > > static void pc_i440fx_1_7_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_2_0_machine_options(m); > m->hw_version = "1.7.0"; > m->default_machine_opts = NULL; > SET_MACHINE_COMPAT(m, PC_COMPAT_1_7); > + pcmc->smbios_defaults = false; > + pcmc->gigabyte_align = false; > } > > DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7, > @@ -557,9 +542,11 @@ DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7, > > static void pc_i440fx_1_6_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_1_7_machine_options(m); > m->hw_version = "1.6.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_1_6); > + pcmc->has_acpi_build = false; > } > > DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6, > @@ -813,9 +800,11 @@ DEFINE_I440FX_MACHINE(v0_14, "pc-0.14", pc_compat_1_2, > > static void pc_i440fx_0_13_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_i440fx_0_14_machine_options(m); > m->hw_version = "0.13"; > SET_MACHINE_COMPAT(m, PC_COMPAT_0_13); > + pcmc->kvmclock_enabled = false; > } > > DEFINE_I440FX_MACHINE(v0_13, "pc-0.13", pc_compat_0_13, > @@ -1037,8 +1026,15 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id) > > static void isapc_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > m->desc = "ISA-only PC"; > m->max_cpus = 1; > + pcmc->pci_enabled = false; > + pcmc->has_acpi_build = false; > + pcmc->smbios_defaults = false; > + pcmc->gigabyte_align = false; > + pcmc->smbios_legacy_mode = true; > + pcmc->has_reserved_memory = false; > } > > DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa, > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index 133bc68..f9afaa2 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -49,22 +49,11 @@ > /* ICH9 AHCI has 6 ports */ > #define MAX_SATA_PORTS 6 > > -static bool has_acpi_build = true; > -static bool rsdp_in_ram = true; > -static bool smbios_defaults = true; > -static bool smbios_legacy_mode; > -static bool smbios_uuid_encoded = true; > -/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to > - * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte > - * pages in the host. > - */ > -static bool gigabyte_align = true; > -static bool has_reserved_memory = true; > - > /* PC hardware initialisation */ > static void pc_q35_init(MachineState *machine) > { > PCMachineState *pcms = PC_MACHINE(machine); > + PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); > Q35PCIHost *q35_host; > PCIHostState *phb; > PCIBus *host_bus; > @@ -76,7 +65,6 @@ static void pc_q35_init(MachineState *machine) > MemoryRegion *ram_memory; > GSIState *gsi_state; > ISABus *isa_bus; > - int pci_enabled = 1; > qemu_irq *gsi; > qemu_irq *i8259; > int i; > @@ -97,7 +85,7 @@ static void pc_q35_init(MachineState *machine) > * breaking migration. > */ > if (machine->ram_size >= 0xb0000000) { > - lowmem = gigabyte_align ? 0x80000000 : 0xb0000000; > + lowmem = pcmc->gigabyte_align ? 0x80000000 : 0xb0000000; > } else { > lowmem = 0xb0000000; > } > @@ -134,7 +122,7 @@ static void pc_q35_init(MachineState *machine) > kvmclock_create(); > > /* pci enabled */ > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > pci_memory = g_new(MemoryRegion, 1); > memory_region_init(pci_memory, NULL, "pci", UINT64_MAX); > rom_memory = pci_memory; > @@ -145,19 +133,20 @@ static void pc_q35_init(MachineState *machine) > > guest_info = pc_guest_info_init(pcms); > guest_info->isapc_ram_fw = false; > - guest_info->has_acpi_build = has_acpi_build; > - guest_info->has_reserved_memory = has_reserved_memory; > - guest_info->rsdp_in_ram = rsdp_in_ram; > + guest_info->has_acpi_build = pcmc->has_acpi_build; > + guest_info->has_reserved_memory = pcmc->has_reserved_memory; > + guest_info->rsdp_in_ram = pcmc->rsdp_in_ram; > > /* Migration was not supported in 2.0 for Q35, so do not bother > * with this hack (see hw/i386/acpi-build.c). > */ > guest_info->legacy_acpi_table_size = 0; > > - if (smbios_defaults) { > + if (pcmc->smbios_defaults) { > /* These values are guest ABI, do not change */ > smbios_set_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", > - mc->name, smbios_legacy_mode, smbios_uuid_encoded, > + mc->name, pcmc->smbios_legacy_mode, > + pcmc->smbios_uuid_encoded, > SMBIOS_ENTRY_POINT_21); > } > > @@ -170,7 +159,7 @@ static void pc_q35_init(MachineState *machine) > /* irq lines */ > gsi_state = g_malloc0(sizeof(*gsi_state)); > if (kvm_irqchip_in_kernel()) { > - kvm_pc_setup_irq_routing(pci_enabled); > + kvm_pc_setup_irq_routing(pcmc->pci_enabled); > gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state, > GSI_NUM_PINS); > } else { > @@ -227,7 +216,7 @@ static void pc_q35_init(MachineState *machine) > for (i = 0; i < ISA_NUM_IRQS; i++) { > gsi_state->i8259_irq[i] = i8259[i]; > } > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > ioapic_init_gsi(gsi_state, "q35"); > } > > @@ -272,7 +261,7 @@ static void pc_q35_init(MachineState *machine) > /* the rest devices to which pci devfn is automatically assigned */ > pc_vga_init(isa_bus, host_bus); > pc_nic_init(isa_bus, host_bus); > - if (pci_enabled) { > + if (pcmc->pci_enabled) { > pc_pci_device_init(host_bus); > } > } > @@ -298,7 +287,6 @@ static void pc_compat_2_3(MachineState *machine) > static void pc_compat_2_2(MachineState *machine) > { > pc_compat_2_3(machine); > - rsdp_in_ram = false; > machine->suppress_vmdesc = true; > } > > @@ -308,23 +296,18 @@ static void pc_compat_2_1(MachineState *machine) > > pc_compat_2_2(machine); > pcms->enforce_aligned_dimm = false; > - smbios_uuid_encoded = false; > x86_cpu_change_kvm_default("svm", NULL); > } > > static void pc_compat_2_0(MachineState *machine) > { > pc_compat_2_1(machine); > - smbios_legacy_mode = true; > - has_reserved_memory = false; > pc_set_legacy_acpi_data_size(); > } > > static void pc_compat_1_7(MachineState *machine) > { > pc_compat_2_0(machine); > - smbios_defaults = false; > - gigabyte_align = false; > option_rom_has_mr = true; > x86_cpu_change_kvm_default("x2apic", NULL); > } > @@ -333,7 +316,6 @@ static void pc_compat_1_6(MachineState *machine) > { > pc_compat_1_7(machine); > rom_file_has_mr = false; > - has_acpi_build = false; > } > > static void pc_compat_1_5(MachineState *machine) > @@ -409,9 +391,11 @@ DEFINE_Q35_MACHINE(v2_3, "pc-q35-2.3", pc_compat_2_3, > > static void pc_q35_2_2_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_q35_2_3_machine_options(m); > m->hw_version = "2.2.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_2); > + pcmc->rsdp_in_ram = false; > } > > DEFINE_Q35_MACHINE(v2_2, "pc-q35-2.2", pc_compat_2_2, > @@ -420,10 +404,12 @@ DEFINE_Q35_MACHINE(v2_2, "pc-q35-2.2", pc_compat_2_2, > > static void pc_q35_2_1_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_q35_2_2_machine_options(m); > m->hw_version = "2.1.0"; > m->default_display = NULL; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_1); > + pcmc->smbios_uuid_encoded = false; > } > > DEFINE_Q35_MACHINE(v2_1, "pc-q35-2.1", pc_compat_2_1, > @@ -432,9 +418,12 @@ DEFINE_Q35_MACHINE(v2_1, "pc-q35-2.1", pc_compat_2_1, > > static void pc_q35_2_0_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_q35_2_1_machine_options(m); > m->hw_version = "2.0.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_2_0); > + pcmc->has_reserved_memory = false; > + pcmc->smbios_legacy_mode = true; > } > > DEFINE_Q35_MACHINE(v2_0, "pc-q35-2.0", pc_compat_2_0, > @@ -443,10 +432,13 @@ DEFINE_Q35_MACHINE(v2_0, "pc-q35-2.0", pc_compat_2_0, > > static void pc_q35_1_7_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_q35_2_0_machine_options(m); > m->hw_version = "1.7.0"; > m->default_machine_opts = NULL; > SET_MACHINE_COMPAT(m, PC_COMPAT_1_7); > + pcmc->smbios_defaults = false; > + pcmc->gigabyte_align = false; > } > > DEFINE_Q35_MACHINE(v1_7, "pc-q35-1.7", pc_compat_1_7, > @@ -455,9 +447,11 @@ DEFINE_Q35_MACHINE(v1_7, "pc-q35-1.7", pc_compat_1_7, > > static void pc_q35_1_6_machine_options(MachineClass *m) > { > + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); > pc_q35_machine_options(m); > m->hw_version = "1.6.0"; > SET_MACHINE_COMPAT(m, PC_COMPAT_1_6); > + pcmc->has_acpi_build = false; > } > > DEFINE_Q35_MACHINE(v1_6, "pc-q35-1.6", pc_compat_1_6, > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h > index 854c330..15171e9 100644 > --- a/include/hw/i386/pc.h > +++ b/include/hw/i386/pc.h > @@ -62,6 +62,20 @@ struct PCMachineClass { > bool broken_reserved_end; > HotplugHandler *(*get_hotplug_handler)(MachineState *machine, > DeviceState *dev); > + > + bool pci_enabled; > + bool has_acpi_build; > + bool rsdp_in_ram; > + bool smbios_defaults; > + bool smbios_legacy_mode; > + bool smbios_uuid_encoded; > + /* Make sure that guest addresses aligned at 1Gbyte boundaries get > + * mapped to host addresses aligned at 1Gbyte boundaries. This way > + * we can use 1GByte pages in the host. > + */ > + bool gigabyte_align; > + bool has_reserved_memory; > + bool kvmclock_enabled; > }; > > #define TYPE_PC_MACHINE "generic-pc-machine" >
On 12/02/2015 11:57 AM, Marcel Apfelbaum wrote: > On 12/02/2015 12:58 AM, Eduardo Habkost wrote: >> This way the compat flags can be initialized in the machine_options() >> function. This will help us to eventually eliminate the pc_compat_*() >> functions. > > Hi, I have only a minor comment here, > >> >> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> >> --- >> hw/i386/pc.c | 8 +++++ >> hw/i386/pc_piix.c | 84 +++++++++++++++++++++++++--------------------------- >> hw/i386/pc_q35.c | 54 +++++++++++++++------------------ >> include/hw/i386/pc.h | 14 +++++++++ >> 4 files changed, 86 insertions(+), 74 deletions(-) >> >> diff --git a/hw/i386/pc.c b/hw/i386/pc.c >> index 5e20e07..129aa04 100644 >> --- a/hw/i386/pc.c >> +++ b/hw/i386/pc.c >> @@ -1952,6 +1952,14 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) >> HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); >> >> pcmc->get_hotplug_handler = mc->get_hotplug_handler; >> + pcmc->pci_enabled = true; >> + pcmc->has_acpi_build = true; >> + pcmc->rsdp_in_ram = true; >> + pcmc->smbios_defaults = true; >> + pcmc->smbios_uuid_encoded = true; >> + pcmc->gigabyte_align = true; >> + pcmc->has_reserved_memory = true; >> + pcmc->kvmclock_enabled = true; >> mc->get_hotplug_handler = pc_get_hotpug_handler; >> mc->cpu_index_to_socket_id = pc_cpu_index_to_socket_id; >> mc->default_boot_order = "cad"; >> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c >> index 2e41efe..7a7f748 100644 >> --- a/hw/i386/pc_piix.c >> +++ b/hw/i386/pc_piix.c >> @@ -60,26 +60,14 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 }; >> static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; >> static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; >> >> -static bool pci_enabled = true; >> -static bool has_acpi_build = true; >> -static bool rsdp_in_ram = true; >> static int legacy_acpi_table_size; >> -static bool smbios_defaults = true; >> -static bool smbios_legacy_mode; >> -static bool smbios_uuid_encoded = true; >> -/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to >> - * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte >> - * pages in the host. >> - */ >> -static bool gigabyte_align = true; >> -static bool has_reserved_memory = true; >> -static bool kvmclock_enabled = true; >> >> /* PC hardware initialisation */ >> static void pc_init1(MachineState *machine, >> const char *host_type, const char *pci_type) >> { >> PCMachineState *pcms = PC_MACHINE(machine); >> + PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); >> MemoryRegion *system_memory = get_system_memory(); >> MemoryRegion *system_io = get_system_io(); >> int i; >> @@ -108,7 +96,7 @@ static void pc_init1(MachineState *machine, >> * breaking migration. >> */ >> if (machine->ram_size >= 0xe0000000) { >> - lowmem = gigabyte_align ? 0xc0000000 : 0xe0000000; >> + lowmem = pcmc->gigabyte_align ? 0xc0000000 : 0xe0000000; >> } else { >> lowmem = 0xe0000000; >> } >> @@ -141,11 +129,11 @@ static void pc_init1(MachineState *machine, >> >> pc_cpus_init(pcms); >> >> - if (kvm_enabled() && kvmclock_enabled) { >> + if (kvm_enabled() && pcmc->kvmclock_enabled) { >> kvmclock_create(); >> } >> >> - if (pci_enabled) { >> + if (pcmc->pci_enabled) { >> pci_memory = g_new(MemoryRegion, 1); >> memory_region_init(pci_memory, NULL, "pci", UINT64_MAX); >> rom_memory = pci_memory; >> @@ -156,18 +144,19 @@ static void pc_init1(MachineState *machine, >> >> guest_info = pc_guest_info_init(pcms); >> >> - guest_info->has_acpi_build = has_acpi_build; >> + guest_info->has_acpi_build = pcmc->has_acpi_build; >> guest_info->legacy_acpi_table_size = legacy_acpi_table_size; > > Why is legacy_acpi_table_size left behind? Maybe it is a new field. Forget about it, the answer is the next patch :) Reviewed-by: Marcel Apfelbaum <marcel@redhat.com> Thanks, Marcel
diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 5e20e07..129aa04 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1952,6 +1952,14 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); pcmc->get_hotplug_handler = mc->get_hotplug_handler; + pcmc->pci_enabled = true; + pcmc->has_acpi_build = true; + pcmc->rsdp_in_ram = true; + pcmc->smbios_defaults = true; + pcmc->smbios_uuid_encoded = true; + pcmc->gigabyte_align = true; + pcmc->has_reserved_memory = true; + pcmc->kvmclock_enabled = true; mc->get_hotplug_handler = pc_get_hotpug_handler; mc->cpu_index_to_socket_id = pc_cpu_index_to_socket_id; mc->default_boot_order = "cad"; diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 2e41efe..7a7f748 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -60,26 +60,14 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 }; static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 }; static const int ide_irq[MAX_IDE_BUS] = { 14, 15 }; -static bool pci_enabled = true; -static bool has_acpi_build = true; -static bool rsdp_in_ram = true; static int legacy_acpi_table_size; -static bool smbios_defaults = true; -static bool smbios_legacy_mode; -static bool smbios_uuid_encoded = true; -/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to - * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte - * pages in the host. - */ -static bool gigabyte_align = true; -static bool has_reserved_memory = true; -static bool kvmclock_enabled = true; /* PC hardware initialisation */ static void pc_init1(MachineState *machine, const char *host_type, const char *pci_type) { PCMachineState *pcms = PC_MACHINE(machine); + PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); MemoryRegion *system_memory = get_system_memory(); MemoryRegion *system_io = get_system_io(); int i; @@ -108,7 +96,7 @@ static void pc_init1(MachineState *machine, * breaking migration. */ if (machine->ram_size >= 0xe0000000) { - lowmem = gigabyte_align ? 0xc0000000 : 0xe0000000; + lowmem = pcmc->gigabyte_align ? 0xc0000000 : 0xe0000000; } else { lowmem = 0xe0000000; } @@ -141,11 +129,11 @@ static void pc_init1(MachineState *machine, pc_cpus_init(pcms); - if (kvm_enabled() && kvmclock_enabled) { + if (kvm_enabled() && pcmc->kvmclock_enabled) { kvmclock_create(); } - if (pci_enabled) { + if (pcmc->pci_enabled) { pci_memory = g_new(MemoryRegion, 1); memory_region_init(pci_memory, NULL, "pci", UINT64_MAX); rom_memory = pci_memory; @@ -156,18 +144,19 @@ static void pc_init1(MachineState *machine, guest_info = pc_guest_info_init(pcms); - guest_info->has_acpi_build = has_acpi_build; + guest_info->has_acpi_build = pcmc->has_acpi_build; guest_info->legacy_acpi_table_size = legacy_acpi_table_size; - guest_info->isapc_ram_fw = !pci_enabled; - guest_info->has_reserved_memory = has_reserved_memory; - guest_info->rsdp_in_ram = rsdp_in_ram; + guest_info->isapc_ram_fw = !pcmc->pci_enabled; + guest_info->has_reserved_memory = pcmc->has_reserved_memory; + guest_info->rsdp_in_ram = pcmc->rsdp_in_ram; - if (smbios_defaults) { + if (pcmc->smbios_defaults) { MachineClass *mc = MACHINE_GET_CLASS(machine); /* These values are guest ABI, do not change */ smbios_set_defaults("QEMU", "Standard PC (i440FX + PIIX, 1996)", - mc->name, smbios_legacy_mode, smbios_uuid_encoded, + mc->name, pcmc->smbios_legacy_mode, + pcmc->smbios_uuid_encoded, SMBIOS_ENTRY_POINT_21); } @@ -182,14 +171,14 @@ static void pc_init1(MachineState *machine, gsi_state = g_malloc0(sizeof(*gsi_state)); if (kvm_irqchip_in_kernel()) { - kvm_pc_setup_irq_routing(pci_enabled); + kvm_pc_setup_irq_routing(pcmc->pci_enabled); gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state, GSI_NUM_PINS); } else { gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS); } - if (pci_enabled) { + if (pcmc->pci_enabled) { pci_bus = i440fx_init(host_type, pci_type, &i440fx_state, &piix3_devfn, &isa_bus, gsi, @@ -217,13 +206,13 @@ static void pc_init1(MachineState *machine, gsi_state->i8259_irq[i] = i8259[i]; } g_free(i8259); - if (pci_enabled) { + if (pcmc->pci_enabled) { ioapic_init_gsi(gsi_state, "i440fx"); } pc_register_ferr_irq(gsi[13]); - pc_vga_init(isa_bus, pci_enabled ? pci_bus : NULL); + pc_vga_init(isa_bus, pcmc->pci_enabled ? pci_bus : NULL); assert(pcms->vmport != ON_OFF_AUTO_MAX); if (pcms->vmport == ON_OFF_AUTO_AUTO) { @@ -237,7 +226,7 @@ static void pc_init1(MachineState *machine, pc_nic_init(isa_bus, pci_bus); ide_drive_get(hd, ARRAY_SIZE(hd)); - if (pci_enabled) { + if (pcmc->pci_enabled) { PCIDevice *dev; if (xen_enabled()) { dev = pci_piix3_xen_ide_init(pci_bus, hd, piix3_devfn + 1); @@ -264,11 +253,11 @@ static void pc_init1(MachineState *machine, pc_cmos_init(pcms, idebus[0], idebus[1], rtc_state); - if (pci_enabled && usb_enabled()) { + if (pcmc->pci_enabled && usb_enabled()) { pci_create_simple(pci_bus, piix3_devfn + 2, "piix3-usb-uhci"); } - if (pci_enabled && acpi_enabled) { + if (pcmc->pci_enabled && acpi_enabled) { DeviceState *piix4_pm; I2CBus *smbus; @@ -289,7 +278,7 @@ static void pc_init1(MachineState *machine, PC_MACHINE_ACPI_DEVICE_PROP, &error_abort); } - if (pci_enabled) { + if (pcmc->pci_enabled) { pc_pci_device_init(pci_bus); } } @@ -315,7 +304,6 @@ static void pc_compat_2_3(MachineState *machine) static void pc_compat_2_2(MachineState *machine) { pc_compat_2_3(machine); - rsdp_in_ram = false; machine->suppress_vmdesc = true; } @@ -324,7 +312,6 @@ static void pc_compat_2_1(MachineState *machine) PCMachineState *pcms = PC_MACHINE(machine); pc_compat_2_2(machine); - smbios_uuid_encoded = false; x86_cpu_change_kvm_default("svm", NULL); pcms->enforce_aligned_dimm = false; } @@ -349,16 +336,12 @@ static void pc_compat_2_0(MachineState *machine) * QEMU 1.7 it is 6414. For RHEL/CentOS 7.0 it is 6418. */ legacy_acpi_table_size = 6652; - smbios_legacy_mode = true; - has_reserved_memory = false; pc_set_legacy_acpi_data_size(); } static void pc_compat_1_7(MachineState *machine) { pc_compat_2_0(machine); - smbios_defaults = false; - gigabyte_align = false; option_rom_has_mr = true; legacy_acpi_table_size = 6414; x86_cpu_change_kvm_default("x2apic", NULL); @@ -368,7 +351,6 @@ static void pc_compat_1_6(MachineState *machine) { pc_compat_1_7(machine); rom_file_has_mr = false; - has_acpi_build = false; } static void pc_compat_1_5(MachineState *machine) @@ -398,17 +380,10 @@ static void pc_compat_1_2(MachineState *machine) static void pc_compat_0_13(MachineState *machine) { pc_compat_1_2(machine); - kvmclock_enabled = false; } static void pc_init_isa(MachineState *machine) { - pci_enabled = false; - has_acpi_build = false; - smbios_defaults = false; - gigabyte_align = false; - smbios_legacy_mode = true; - has_reserved_memory = false; option_rom_has_mr = true; rom_file_has_mr = false; if (!machine->cpu_model) { @@ -510,9 +485,11 @@ DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3, static void pc_i440fx_2_2_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_2_3_machine_options(m); m->hw_version = "2.2.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_2_2); + pcmc->rsdp_in_ram = false; } DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2, @@ -521,10 +498,12 @@ DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2, static void pc_i440fx_2_1_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_2_2_machine_options(m); m->hw_version = "2.1.0"; m->default_display = NULL; SET_MACHINE_COMPAT(m, PC_COMPAT_2_1); + pcmc->smbios_uuid_encoded = false; } DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1, @@ -534,9 +513,12 @@ DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1, static void pc_i440fx_2_0_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_2_1_machine_options(m); m->hw_version = "2.0.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_2_0); + pcmc->smbios_legacy_mode = true; + pcmc->has_reserved_memory = false; } DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0, @@ -545,10 +527,13 @@ DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0, static void pc_i440fx_1_7_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_2_0_machine_options(m); m->hw_version = "1.7.0"; m->default_machine_opts = NULL; SET_MACHINE_COMPAT(m, PC_COMPAT_1_7); + pcmc->smbios_defaults = false; + pcmc->gigabyte_align = false; } DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7, @@ -557,9 +542,11 @@ DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7, static void pc_i440fx_1_6_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_1_7_machine_options(m); m->hw_version = "1.6.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_1_6); + pcmc->has_acpi_build = false; } DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6, @@ -813,9 +800,11 @@ DEFINE_I440FX_MACHINE(v0_14, "pc-0.14", pc_compat_1_2, static void pc_i440fx_0_13_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_i440fx_0_14_machine_options(m); m->hw_version = "0.13"; SET_MACHINE_COMPAT(m, PC_COMPAT_0_13); + pcmc->kvmclock_enabled = false; } DEFINE_I440FX_MACHINE(v0_13, "pc-0.13", pc_compat_0_13, @@ -1037,8 +1026,15 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id) static void isapc_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); m->desc = "ISA-only PC"; m->max_cpus = 1; + pcmc->pci_enabled = false; + pcmc->has_acpi_build = false; + pcmc->smbios_defaults = false; + pcmc->gigabyte_align = false; + pcmc->smbios_legacy_mode = true; + pcmc->has_reserved_memory = false; } DEFINE_PC_MACHINE(isapc, "isapc", pc_init_isa, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 133bc68..f9afaa2 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -49,22 +49,11 @@ /* ICH9 AHCI has 6 ports */ #define MAX_SATA_PORTS 6 -static bool has_acpi_build = true; -static bool rsdp_in_ram = true; -static bool smbios_defaults = true; -static bool smbios_legacy_mode; -static bool smbios_uuid_encoded = true; -/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to - * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte - * pages in the host. - */ -static bool gigabyte_align = true; -static bool has_reserved_memory = true; - /* PC hardware initialisation */ static void pc_q35_init(MachineState *machine) { PCMachineState *pcms = PC_MACHINE(machine); + PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); Q35PCIHost *q35_host; PCIHostState *phb; PCIBus *host_bus; @@ -76,7 +65,6 @@ static void pc_q35_init(MachineState *machine) MemoryRegion *ram_memory; GSIState *gsi_state; ISABus *isa_bus; - int pci_enabled = 1; qemu_irq *gsi; qemu_irq *i8259; int i; @@ -97,7 +85,7 @@ static void pc_q35_init(MachineState *machine) * breaking migration. */ if (machine->ram_size >= 0xb0000000) { - lowmem = gigabyte_align ? 0x80000000 : 0xb0000000; + lowmem = pcmc->gigabyte_align ? 0x80000000 : 0xb0000000; } else { lowmem = 0xb0000000; } @@ -134,7 +122,7 @@ static void pc_q35_init(MachineState *machine) kvmclock_create(); /* pci enabled */ - if (pci_enabled) { + if (pcmc->pci_enabled) { pci_memory = g_new(MemoryRegion, 1); memory_region_init(pci_memory, NULL, "pci", UINT64_MAX); rom_memory = pci_memory; @@ -145,19 +133,20 @@ static void pc_q35_init(MachineState *machine) guest_info = pc_guest_info_init(pcms); guest_info->isapc_ram_fw = false; - guest_info->has_acpi_build = has_acpi_build; - guest_info->has_reserved_memory = has_reserved_memory; - guest_info->rsdp_in_ram = rsdp_in_ram; + guest_info->has_acpi_build = pcmc->has_acpi_build; + guest_info->has_reserved_memory = pcmc->has_reserved_memory; + guest_info->rsdp_in_ram = pcmc->rsdp_in_ram; /* Migration was not supported in 2.0 for Q35, so do not bother * with this hack (see hw/i386/acpi-build.c). */ guest_info->legacy_acpi_table_size = 0; - if (smbios_defaults) { + if (pcmc->smbios_defaults) { /* These values are guest ABI, do not change */ smbios_set_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", - mc->name, smbios_legacy_mode, smbios_uuid_encoded, + mc->name, pcmc->smbios_legacy_mode, + pcmc->smbios_uuid_encoded, SMBIOS_ENTRY_POINT_21); } @@ -170,7 +159,7 @@ static void pc_q35_init(MachineState *machine) /* irq lines */ gsi_state = g_malloc0(sizeof(*gsi_state)); if (kvm_irqchip_in_kernel()) { - kvm_pc_setup_irq_routing(pci_enabled); + kvm_pc_setup_irq_routing(pcmc->pci_enabled); gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state, GSI_NUM_PINS); } else { @@ -227,7 +216,7 @@ static void pc_q35_init(MachineState *machine) for (i = 0; i < ISA_NUM_IRQS; i++) { gsi_state->i8259_irq[i] = i8259[i]; } - if (pci_enabled) { + if (pcmc->pci_enabled) { ioapic_init_gsi(gsi_state, "q35"); } @@ -272,7 +261,7 @@ static void pc_q35_init(MachineState *machine) /* the rest devices to which pci devfn is automatically assigned */ pc_vga_init(isa_bus, host_bus); pc_nic_init(isa_bus, host_bus); - if (pci_enabled) { + if (pcmc->pci_enabled) { pc_pci_device_init(host_bus); } } @@ -298,7 +287,6 @@ static void pc_compat_2_3(MachineState *machine) static void pc_compat_2_2(MachineState *machine) { pc_compat_2_3(machine); - rsdp_in_ram = false; machine->suppress_vmdesc = true; } @@ -308,23 +296,18 @@ static void pc_compat_2_1(MachineState *machine) pc_compat_2_2(machine); pcms->enforce_aligned_dimm = false; - smbios_uuid_encoded = false; x86_cpu_change_kvm_default("svm", NULL); } static void pc_compat_2_0(MachineState *machine) { pc_compat_2_1(machine); - smbios_legacy_mode = true; - has_reserved_memory = false; pc_set_legacy_acpi_data_size(); } static void pc_compat_1_7(MachineState *machine) { pc_compat_2_0(machine); - smbios_defaults = false; - gigabyte_align = false; option_rom_has_mr = true; x86_cpu_change_kvm_default("x2apic", NULL); } @@ -333,7 +316,6 @@ static void pc_compat_1_6(MachineState *machine) { pc_compat_1_7(machine); rom_file_has_mr = false; - has_acpi_build = false; } static void pc_compat_1_5(MachineState *machine) @@ -409,9 +391,11 @@ DEFINE_Q35_MACHINE(v2_3, "pc-q35-2.3", pc_compat_2_3, static void pc_q35_2_2_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_2_3_machine_options(m); m->hw_version = "2.2.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_2_2); + pcmc->rsdp_in_ram = false; } DEFINE_Q35_MACHINE(v2_2, "pc-q35-2.2", pc_compat_2_2, @@ -420,10 +404,12 @@ DEFINE_Q35_MACHINE(v2_2, "pc-q35-2.2", pc_compat_2_2, static void pc_q35_2_1_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_2_2_machine_options(m); m->hw_version = "2.1.0"; m->default_display = NULL; SET_MACHINE_COMPAT(m, PC_COMPAT_2_1); + pcmc->smbios_uuid_encoded = false; } DEFINE_Q35_MACHINE(v2_1, "pc-q35-2.1", pc_compat_2_1, @@ -432,9 +418,12 @@ DEFINE_Q35_MACHINE(v2_1, "pc-q35-2.1", pc_compat_2_1, static void pc_q35_2_0_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_2_1_machine_options(m); m->hw_version = "2.0.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_2_0); + pcmc->has_reserved_memory = false; + pcmc->smbios_legacy_mode = true; } DEFINE_Q35_MACHINE(v2_0, "pc-q35-2.0", pc_compat_2_0, @@ -443,10 +432,13 @@ DEFINE_Q35_MACHINE(v2_0, "pc-q35-2.0", pc_compat_2_0, static void pc_q35_1_7_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_2_0_machine_options(m); m->hw_version = "1.7.0"; m->default_machine_opts = NULL; SET_MACHINE_COMPAT(m, PC_COMPAT_1_7); + pcmc->smbios_defaults = false; + pcmc->gigabyte_align = false; } DEFINE_Q35_MACHINE(v1_7, "pc-q35-1.7", pc_compat_1_7, @@ -455,9 +447,11 @@ DEFINE_Q35_MACHINE(v1_7, "pc-q35-1.7", pc_compat_1_7, static void pc_q35_1_6_machine_options(MachineClass *m) { + PCMachineClass *pcmc = PC_MACHINE_CLASS(m); pc_q35_machine_options(m); m->hw_version = "1.6.0"; SET_MACHINE_COMPAT(m, PC_COMPAT_1_6); + pcmc->has_acpi_build = false; } DEFINE_Q35_MACHINE(v1_6, "pc-q35-1.6", pc_compat_1_6, diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 854c330..15171e9 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -62,6 +62,20 @@ struct PCMachineClass { bool broken_reserved_end; HotplugHandler *(*get_hotplug_handler)(MachineState *machine, DeviceState *dev); + + bool pci_enabled; + bool has_acpi_build; + bool rsdp_in_ram; + bool smbios_defaults; + bool smbios_legacy_mode; + bool smbios_uuid_encoded; + /* Make sure that guest addresses aligned at 1Gbyte boundaries get + * mapped to host addresses aligned at 1Gbyte boundaries. This way + * we can use 1GByte pages in the host. + */ + bool gigabyte_align; + bool has_reserved_memory; + bool kvmclock_enabled; }; #define TYPE_PC_MACHINE "generic-pc-machine"
This way the compat flags can be initialized in the machine_options() function. This will help us to eventually eliminate the pc_compat_*() functions. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- hw/i386/pc.c | 8 +++++ hw/i386/pc_piix.c | 84 +++++++++++++++++++++++++--------------------------- hw/i386/pc_q35.c | 54 +++++++++++++++------------------ include/hw/i386/pc.h | 14 +++++++++ 4 files changed, 86 insertions(+), 74 deletions(-)