From: Igor Mammedov <imammedo@redhat.com>
To: Wei Yang <richardw.yang@linux.intel.com>
Cc: peter.maydell@linaro.org, mst@redhat.com, qemu-devel@nongnu.org,
shannon.zhaosl@gmail.com, qemu-arm@nongnu.org,
marcel.apfelbaum@gmail.com
Subject: Re: [Qemu-arm] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg
Date: Wed, 13 Mar 2019 13:23:00 +0100 [thread overview]
Message-ID: <20190313132300.3f56a5ca@redhat.com> (raw)
In-Reply-To: <20190313044253.31988-4-richardw.yang@linux.intel.com>
On Wed, 13 Mar 2019 12:42:53 +0800
Wei Yang <richardw.yang@linux.intel.com> wrote:
> Now we have two identical build_mcfg function.
>
> Extract them to aml-build.c.
>
> Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
> ---
> hw/acpi/aml-build.c | 30 ++++++++++++++++++++++++++++++
> hw/arm/virt-acpi-build.c | 16 ----------------
> hw/i386/acpi-build.c | 31 +------------------------------
> include/hw/acpi/aml-build.h | 1 +
> 4 files changed, 32 insertions(+), 46 deletions(-)
>
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 555c24f21d..58d3b8f31d 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
I don't like polluting aml-build.c with PCI stuff,
we have a lot of PCI related code that needs generalizing
lets create a new file for that, something like
hw/acpi/pci.c + include/hw/acpi/pci.h
> @@ -25,6 +25,7 @@
> #include "qemu/bswap.h"
> #include "qemu/bitops.h"
> #include "sysemu/numa.h"
> +#include "hw/pci/pcie_host.h"
>
> static GArray *build_alloc_array(void)
> {
> @@ -1870,3 +1871,32 @@ build_hdr:
> build_header(linker, tbl, (void *)(tbl->data + fadt_start),
> "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
> }
> +
> +void build_mcfg(GArray *table_data, BIOSLinker *linker, AcpiMcfgInfo *info)
> +{
> + AcpiTableMcfg *mcfg;
> + const char *sig;
> + int len = sizeof(*mcfg) + sizeof(mcfg->allocation[0]);
> +
> + mcfg = acpi_data_push(table_data, len);
> + mcfg->allocation[0].address = cpu_to_le64(info->mcfg_base);
> + /* Only a single allocation so no need to play with segments */
> + mcfg->allocation[0].pci_segment = cpu_to_le16(0);
> + mcfg->allocation[0].start_bus_number = 0;
> + mcfg->allocation[0].end_bus_number = PCIE_MMCFG_BUS(info->mcfg_size - 1);
> + /*
> + * MCFG is used for ECAM which can be enabled or disabled by guest.
> + * To avoid table size changes (which create migration issues),
> + * always create the table even if there are no allocations,
> + * but set the signature to a reserved value in this case.
> + * ACPI spec requires OSPMs to ignore such tables.
> + */
> + if (info->mcfg_base == PCIE_BASE_ADDR_UNMAPPED) {
> + /* Reserved signature: ignored by OSPM */
> + sig = "QEMU";
> + } else {
> + sig = "MCFG";
> + }
I'd leave these hack at acpi-build.c, just push it up call chain.
More over we don't really need it since resizeable memory region was introduced.
So we need to keep table_blob size only for legacy usecase (pre resizable)
and for that just padding table_blob on required size would be sufficient,
there is no need to create dummy QEMU table.
As for newer machines (since resizeable memory region) we don't need to
do even that i.e. just skip table generation altogether if guest disabled it.
> + build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL);
> +}
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index ae7858a79a..92d8fccb00 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -557,22 +557,6 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
> return true;
> }
>
> -static void
> -build_mcfg(GArray *table_data, BIOSLinker *linker, AcpiMcfgInfo *info)
> -{
> - AcpiTableMcfg *mcfg;
> - int len = sizeof(*mcfg) + sizeof(mcfg->allocation[0]);
> -
> - mcfg = acpi_data_push(table_data, len);
> - mcfg->allocation[0].address = cpu_to_le64(info->mcfg_base);
> - /* Only a single allocation so no need to play with segments */
> - mcfg->allocation[0].pci_segment = cpu_to_le16(0);
> - mcfg->allocation[0].start_bus_number = 0;
> - mcfg->allocation[0].end_bus_number = PCIE_MMCFG_BUS(info->mcfg_size - 1);
> -
> - build_header(linker, table_data, (void *)mcfg, "MCFG", len, 1, NULL, NULL);
> -}
> -
> /* GTDT */
> static void
> build_gtdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index c5b1c3be99..b537a39d42 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2392,35 +2392,6 @@ build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine)
> table_data->len - srat_start, 1, NULL, NULL);
> }
>
> -static void
> -build_mcfg_q35(GArray *table_data, BIOSLinker *linker, AcpiMcfgInfo *info)
> -{
> - AcpiTableMcfg *mcfg;
> - const char *sig;
> - int len = sizeof(*mcfg) + 1 * sizeof(mcfg->allocation[0]);
> -
> - mcfg = acpi_data_push(table_data, len);
> - mcfg->allocation[0].address = cpu_to_le64(info->mcfg_base);
> - /* Only a single allocation so no need to play with segments */
> - mcfg->allocation[0].pci_segment = cpu_to_le16(0);
> - mcfg->allocation[0].start_bus_number = 0;
> - mcfg->allocation[0].end_bus_number = PCIE_MMCFG_BUS(info->mcfg_size - 1);
> -
> - /* MCFG is used for ECAM which can be enabled or disabled by guest.
> - * To avoid table size changes (which create migration issues),
> - * always create the table even if there are no allocations,
> - * but set the signature to a reserved value in this case.
> - * ACPI spec requires OSPMs to ignore such tables.
> - */
> - if (info->mcfg_base == PCIE_BASE_ADDR_UNMAPPED) {
> - /* Reserved signature: ignored by OSPM */
> - sig = "QEMU";
> - } else {
> - sig = "MCFG";
> - }
> - build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL);
> -}
> -
> /*
> * VT-d spec 8.1 DMA Remapping Reporting Structure
> * (version Oct. 2014 or later)
> @@ -2687,7 +2658,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine)
> }
> if (acpi_get_mcfg(&mcfg)) {
> acpi_add_table(table_offsets, tables_blob);
> - build_mcfg_q35(tables_blob, tables->linker, &mcfg);
> + build_mcfg(tables_blob, tables->linker, &mcfg);
> }
> if (x86_iommu_get_default()) {
> IommuType IOMMUType = x86_iommu_get_type();
> diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h
> index b63b85d67c..8f2ea3679f 100644
> --- a/include/hw/acpi/aml-build.h
> +++ b/include/hw/acpi/aml-build.h
> @@ -423,4 +423,5 @@ void build_slit(GArray *table_data, BIOSLinker *linker);
>
> void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f,
> const char *oem_id, const char *oem_table_id);
> +void build_mcfg(GArray *table_data, BIOSLinker *linker, AcpiMcfgInfo *info);
> #endif
next prev parent reply other threads:[~2019-03-13 12:23 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-13 4:42 [Qemu-devel] [RFC PATCH 0/3] Extract build_mcfg Wei Yang
2019-03-13 4:42 ` [Qemu-devel] [RFC PATCH 1/3] hw/arm/virt-acpi-build: use acpi_get_mcfg() to calculate bus number Wei Yang
2019-03-13 12:00 ` [Qemu-arm] " Igor Mammedov
2019-03-13 13:26 ` [Qemu-devel] " Wei Yang
2019-03-13 4:42 ` [Qemu-arm] [RFC PATCH 2/3] hw/arm/virt-acpi-build: remove unnecessary variable mcfg_start Wei Yang
2019-03-13 12:06 ` Igor Mammedov
2019-03-13 4:42 ` [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg Wei Yang
2019-03-13 12:23 ` Igor Mammedov [this message]
2019-03-13 13:33 ` Wei Yang
2019-03-13 16:09 ` [Qemu-arm] " Igor Mammedov
2019-03-13 21:31 ` Wei Yang
2019-03-14 9:18 ` Igor Mammedov
2019-03-14 11:54 ` [Qemu-arm] " Wei Yang
2019-03-16 10:31 ` Wei Yang
2019-03-20 13:40 ` Wei Yang
2019-04-02 3:53 ` [Qemu-arm] " Wei Yang
2019-04-02 3:53 ` Wei Yang
2019-04-02 6:15 ` [Qemu-arm] " Igor Mammedov
2019-04-02 6:15 ` Igor Mammedov
2019-04-05 8:55 ` [Qemu-arm] " Wei Yang
2019-04-05 8:55 ` Wei Yang
2019-04-05 8:55 ` Wei Yang
2019-04-09 14:54 ` [Qemu-arm] " Igor Mammedov
2019-04-09 14:54 ` Igor Mammedov
2019-04-12 5:44 ` [Qemu-arm] " Wei Yang
2019-04-12 5:44 ` Wei Yang
2019-04-12 5:44 ` Wei Yang
2019-04-12 8:14 ` [Qemu-arm] " Igor Mammedov
2019-04-12 8:14 ` Igor Mammedov
2019-03-13 12:30 ` [Qemu-arm] [Qemu-devel] [RFC PATCH 0/3] " Igor Mammedov
2019-03-13 13:24 ` Wei Yang
2019-03-13 16:17 ` [Qemu-arm] " Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190313132300.3f56a5ca@redhat.com \
--to=imammedo@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richardw.yang@linux.intel.com \
--cc=shannon.zhaosl@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.