[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 08/11] hw/arm/virt-acpi-build: remove redundant
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [PATCH 08/11] hw/arm/virt-acpi-build: remove redundant members from VirtGuestInfo |
Date: |
Thu, 15 Dec 2016 16:04:50 +0100 |
On Tue, 13 Dec 2016 22:45:19 +0100
Andrew Jones <address@hidden> wrote:
> Now that we pass VirtMachineState, and guest-info is just part of
> that state, we can remove all the redundant members and access
> the VirtMachineState directly.
>
> Signed-off-by: Andrew Jones <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
> ---
> hw/arm/virt-acpi-build.c | 72
> +++++++++++++++++++++++++-----------------------
> hw/arm/virt.c | 6 ----
> include/hw/arm/virt.h | 6 ----
> 3 files changed, 37 insertions(+), 47 deletions(-)
>
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index f7ce6aeed307..7a1efd0dc538 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -384,7 +384,7 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker,
> unsigned rsdt_tbl_offset)
> }
>
> static void
> -build_iort(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_iort(GArray *table_data, BIOSLinker *linker)
> {
> int iort_start = table_data->len;
> AcpiIortIdMapping *idmap;
> @@ -439,11 +439,11 @@ build_iort(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> }
>
> static void
> -build_spcr(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_spcr(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> {
> AcpiSerialPortConsoleRedirection *spcr;
> - const MemMapEntry *uart_memmap = &guest_info->memmap[VIRT_UART];
> - int irq = guest_info->irqmap[VIRT_UART] + ARM_SPI_BASE;
> + const MemMapEntry *uart_memmap = &vms->memmap[VIRT_UART];
> + int irq = vms->irqmap[VIRT_UART] + ARM_SPI_BASE;
>
> spcr = acpi_data_push(table_data, sizeof(*spcr));
>
> @@ -472,16 +472,16 @@ build_spcr(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> }
>
> static void
> -build_srat(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_srat(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> {
> AcpiSystemResourceAffinityTable *srat;
> AcpiSratProcessorGiccAffinity *core;
> AcpiSratMemoryAffinity *numamem;
> int i, j, srat_start;
> uint64_t mem_base;
> - uint32_t *cpu_node = g_malloc0(guest_info->smp_cpus * sizeof(uint32_t));
> + uint32_t *cpu_node = g_malloc0(vms->smp_cpus * sizeof(uint32_t));
>
> - for (i = 0; i < guest_info->smp_cpus; i++) {
> + for (i = 0; i < vms->smp_cpus; i++) {
> j = numa_get_node_for_cpu(i);
> if (j < nb_numa_nodes) {
> cpu_node[i] = j;
> @@ -492,7 +492,7 @@ build_srat(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> srat = acpi_data_push(table_data, sizeof(*srat));
> srat->reserved1 = cpu_to_le32(1);
>
> - for (i = 0; i < guest_info->smp_cpus; ++i) {
> + for (i = 0; i < vms->smp_cpus; ++i) {
> core = acpi_data_push(table_data, sizeof(*core));
> core->type = ACPI_SRAT_PROCESSOR_GICC;
> core->length = sizeof(*core);
> @@ -502,7 +502,7 @@ build_srat(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> }
> g_free(cpu_node);
>
> - mem_base = guest_info->memmap[VIRT_MEM].base;
> + mem_base = vms->memmap[VIRT_MEM].base;
> for (i = 0; i < nb_numa_nodes; ++i) {
> numamem = acpi_data_push(table_data, sizeof(*numamem));
> build_srat_memory(numamem, mem_base, numa_info[i].node_mem, i,
> @@ -515,10 +515,10 @@ build_srat(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> }
>
> static void
> -build_mcfg(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_mcfg(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> {
> AcpiTableMcfg *mcfg;
> - const MemMapEntry *memmap = guest_info->memmap;
> + const MemMapEntry *memmap = vms->memmap;
> int len = sizeof(*mcfg) + sizeof(mcfg->allocation[0]);
>
> mcfg = acpi_data_push(table_data, len);
> @@ -561,11 +561,12 @@ build_gtdt(GArray *table_data, BIOSLinker *linker)
>
> /* MADT */
> static void
> -build_madt(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_madt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> {
> + VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
> int madt_start = table_data->len;
> - const MemMapEntry *memmap = guest_info->memmap;
> - const int *irqmap = guest_info->irqmap;
> + const MemMapEntry *memmap = vms->memmap;
> + const int *irqmap = vms->irqmap;
> AcpiMultipleApicTable *madt;
> AcpiMadtGenericDistributor *gicd;
> AcpiMadtGenericMsiFrame *gic_msi;
> @@ -577,16 +578,16 @@ build_madt(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> gicd->type = ACPI_APIC_GENERIC_DISTRIBUTOR;
> gicd->length = sizeof(*gicd);
> gicd->base_address = memmap[VIRT_GIC_DIST].base;
> - gicd->version = guest_info->gic_version;
> + gicd->version = vms->gic_version;
>
> - for (i = 0; i < guest_info->smp_cpus; i++) {
> + for (i = 0; i < vms->smp_cpus; i++) {
> AcpiMadtGenericInterrupt *gicc = acpi_data_push(table_data,
> sizeof *gicc);
> ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(i));
>
> gicc->type = ACPI_APIC_GENERIC_INTERRUPT;
> gicc->length = sizeof(*gicc);
> - if (guest_info->gic_version == 2) {
> + if (vms->gic_version == 2) {
> gicc->base_address = memmap[VIRT_GIC_CPU].base;
> }
> gicc->cpu_interface_number = i;
> @@ -599,7 +600,7 @@ build_madt(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> }
> }
>
> - if (guest_info->gic_version == 3) {
> + if (vms->gic_version == 3) {
> AcpiMadtGenericTranslator *gic_its;
> AcpiMadtGenericRedistributor *gicr = acpi_data_push(table_data,
> sizeof *gicr);
> @@ -609,7 +610,7 @@ build_madt(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> gicr->base_address = cpu_to_le64(memmap[VIRT_GIC_REDIST].base);
> gicr->range_length = cpu_to_le32(memmap[VIRT_GIC_REDIST].size);
>
> - if (its_class_name() && !guest_info->no_its) {
> + if (its_class_name() && !vmc->no_its) {
> gic_its = acpi_data_push(table_data, sizeof *gic_its);
> gic_its->type = ACPI_APIC_GENERIC_TRANSLATOR;
> gic_its->length = sizeof(*gic_its);
> @@ -658,11 +659,11 @@ build_fadt(GArray *table_data, BIOSLinker *linker,
> unsigned dsdt_tbl_offset)
>
> /* DSDT */
> static void
> -build_dsdt(GArray *table_data, BIOSLinker *linker, VirtGuestInfo *guest_info)
> +build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> {
> Aml *scope, *dsdt;
> - const MemMapEntry *memmap = guest_info->memmap;
> - const int *irqmap = guest_info->irqmap;
> + const MemMapEntry *memmap = vms->memmap;
> + const int *irqmap = vms->irqmap;
>
> dsdt = init_aml_allocator();
> /* Reserve space for header */
> @@ -674,7 +675,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> * the RTC ACPI device at all when using UEFI.
> */
> scope = aml_scope("\\_SB");
> - acpi_dsdt_add_cpus(scope, guest_info->smp_cpus);
> + acpi_dsdt_add_cpus(scope, vms->smp_cpus);
> acpi_dsdt_add_uart(scope, &memmap[VIRT_UART],
> (irqmap[VIRT_UART] + ARM_SPI_BASE));
> acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
> @@ -682,7 +683,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
> VirtGuestInfo *guest_info)
> acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO],
> (irqmap[VIRT_MMIO] + ARM_SPI_BASE),
> NUM_VIRTIO_TRANSPORTS);
> acpi_dsdt_add_pci(scope, memmap, (irqmap[VIRT_PCIE] + ARM_SPI_BASE),
> - guest_info->use_highmem);
> + vms->highmem);
> acpi_dsdt_add_gpio(scope, &memmap[VIRT_GPIO],
> (irqmap[VIRT_GPIO] + ARM_SPI_BASE));
> acpi_dsdt_add_power_button(scope);
> @@ -709,8 +710,9 @@ struct AcpiBuildState {
> } AcpiBuildState;
>
> static
> -void virt_acpi_build(VirtGuestInfo *guest_info, AcpiBuildTables *tables)
> +void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
> {
> + VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
> GArray *table_offsets;
> unsigned dsdt, rsdt;
> GArray *tables_blob = tables->table_data;
> @@ -724,32 +726,32 @@ void virt_acpi_build(VirtGuestInfo *guest_info,
> AcpiBuildTables *tables)
>
> /* DSDT is pointed to by FADT */
> dsdt = tables_blob->len;
> - build_dsdt(tables_blob, tables->linker, guest_info);
> + build_dsdt(tables_blob, tables->linker, vms);
>
> /* FADT MADT GTDT MCFG SPCR pointed to by RSDT */
> acpi_add_table(table_offsets, tables_blob);
> build_fadt(tables_blob, tables->linker, dsdt);
>
> acpi_add_table(table_offsets, tables_blob);
> - build_madt(tables_blob, tables->linker, guest_info);
> + build_madt(tables_blob, tables->linker, vms);
>
> acpi_add_table(table_offsets, tables_blob);
> build_gtdt(tables_blob, tables->linker);
>
> acpi_add_table(table_offsets, tables_blob);
> - build_mcfg(tables_blob, tables->linker, guest_info);
> + build_mcfg(tables_blob, tables->linker, vms);
>
> acpi_add_table(table_offsets, tables_blob);
> - build_spcr(tables_blob, tables->linker, guest_info);
> + build_spcr(tables_blob, tables->linker, vms);
>
> if (nb_numa_nodes > 0) {
> acpi_add_table(table_offsets, tables_blob);
> - build_srat(tables_blob, tables->linker, guest_info);
> + build_srat(tables_blob, tables->linker, vms);
> }
>
> - if (its_class_name() && !guest_info->no_its) {
> + if (its_class_name() && !vmc->no_its) {
> acpi_add_table(table_offsets, tables_blob);
> - build_iort(tables_blob, tables->linker, guest_info);
> + build_iort(tables_blob, tables->linker);
> }
>
> /* RSDT is pointed to by RSDP */
> @@ -788,13 +790,13 @@ static void virt_acpi_build_update(void *build_opaque)
>
> acpi_build_tables_init(&tables);
>
> - virt_acpi_build(build_state->guest_info, &tables);
> + virt_acpi_build(container_of(build_state->guest_info,
> + VirtMachineState, acpi_guest_info),
> &tables);
>
> acpi_ram_update(build_state->table_mr, tables.table_data);
> acpi_ram_update(build_state->rsdp_mr, tables.rsdp);
> acpi_ram_update(build_state->linker_mr, tables.linker->cmd_blob);
>
> -
> acpi_build_tables_cleanup(&tables, true);
> }
>
> @@ -842,7 +844,7 @@ void virt_acpi_setup(VirtMachineState *vms)
> build_state->guest_info = guest_info;
>
> acpi_build_tables_init(&tables);
> - virt_acpi_build(build_state->guest_info, &tables);
> + virt_acpi_build(vms, &tables);
>
> /* Now expose it all to Guest */
> build_state->table_mr = acpi_add_rom_blob(build_state, tables.table_data,
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index bcf8a2954c16..2cb2e5b4f52a 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1416,13 +1416,7 @@ static void machvirt_init(MachineState *machine)
> create_fw_cfg(vms, &address_space_memory);
> rom_set_fw(fw_cfg_find());
>
> - guest_info->smp_cpus = vms->smp_cpus;
> guest_info->fw_cfg = fw_cfg_find();
> - guest_info->memmap = vms->memmap;
> - guest_info->irqmap = vms->irqmap;
> - guest_info->use_highmem = vms->highmem;
> - guest_info->gic_version = vms->gic_version;
> - guest_info->no_its = vmc->no_its;
> vms->machine_done.notify = virt_machine_done;
> qemu_add_machine_init_done_notifier(&vms->machine_done);
>
> diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
> index cbedc682ae99..52b35478223e 100644
> --- a/include/hw/arm/virt.h
> +++ b/include/hw/arm/virt.h
> @@ -82,13 +82,7 @@ typedef struct MemMapEntry {
> } MemMapEntry;
>
> typedef struct VirtGuestInfo {
> - int smp_cpus;
> FWCfgState *fw_cfg;
> - const MemMapEntry *memmap;
> - const int *irqmap;
> - bool use_highmem;
> - int gic_version;
> - bool no_its;
> } VirtGuestInfo;
>
> typedef struct {
- Re: [Qemu-devel] [PATCH 03/11] hw/arm/virt: use VirtMachineState.smp_cpus, (continued)
- [Qemu-devel] [PATCH 05/11] hw/arm/virt: remove include/hw/arm/virt-acpi-build.h, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 06/11] hw/arm/virt: move VirtMachineState/Class to virt.h, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 07/11] hw/arm/virt: pass VirtMachineState instead of VirtGuestInfo, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 08/11] hw/arm/virt-acpi-build: remove redundant members from VirtGuestInfo, Andrew Jones, 2016/12/13
- Re: [Qemu-devel] [PATCH 08/11] hw/arm/virt-acpi-build: remove redundant members from VirtGuestInfo,
Igor Mammedov <=
- [Qemu-devel] [PATCH 10/11] hw/arm/virt: remove VirtGuestInfo, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 09/11] hw/arm/virt-acpi-build: don't save VirtGuestInfo on AcpiBuildState, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 11/11] hw/arm/virt-acpi-build: Don't incorrectly claim architectural timer to be edge-triggered, Andrew Jones, 2016/12/13
- Re: [Qemu-devel] [PATCH 00/11] Remove VirtGuestInfo, Michael S. Tsirkin, 2016/12/15