[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg
From: |
Wei Yang |
Subject: |
Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg |
Date: |
Thu, 14 Mar 2019 11:54:31 +0000 |
User-agent: |
NeoMutt/20170113 (1.7.2) |
On Thu, Mar 14, 2019 at 10:18:30AM +0100, Igor Mammedov wrote:
>On Wed, 13 Mar 2019 21:31:37 +0000
>Wei Yang <address@hidden> wrote:
>
>> On Wed, Mar 13, 2019 at 05:09:43PM +0100, Igor Mammedov wrote:
>> >On Wed, 13 Mar 2019 13:33:59 +0000
>> >Wei Yang <address@hidden> wrote:
>> >
>> >> On Wed, Mar 13, 2019 at 01:23:00PM +0100, Igor Mammedov wrote:
>> >> >On Wed, 13 Mar 2019 12:42:53 +0800
>> >> >Wei Yang <address@hidden> wrote:
>> >> >
>> >> >> Now we have two identical build_mcfg function.
>> >> >>
>> >> >> Extract them to aml-build.c.
>> >> >>
>> >> >> Signed-off-by: Wei Yang <address@hidden>
>> >> >> ---
>> >> >> 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.
>> >>
>> >> Assign sig in acpi-build.c and pass it to build_mcfg()?
>> >nope, see more below
>> >
>> >
>> >> >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.
>> >> >
>> >>
>> >> I am lost at this place.
>> >>
>> >> sig is a part of ACPI table header, you mean the sig is not necessary to
>> >> be set in ACPI table header?
>> >>
>> >> "skip table generation" means remove build_header() in build_mcfg()?
>> >I mean do not call build_mcfg() at all when you don't have to.
>> >
>> >And when you need to keep table_blob the same size (for old machines)
>> >using acpi_data_push() to reserve space instead of build_mcfg(sig="QEMU")
>> >might just work as well. it's still hack but it can live in x86 specific
>> >acpi_build() keeping build_mcfg() generic.
>> >
>>
>> Seems got your idea.
>>
>> >As for defining what to use as criteria to decide when we need to keep
>> >table_blob size the same, I don't remember history of it, so I'd suggest
>> >to look at commit a1666142, study history of acpi_ram_update() and
>> >legacy_acpi_table_size to figure out since which machine type one doesn't
>> >have to keep table_blob size the same.
>> >
>>
>> OK, let me study the history first.
>>
>> BTW, the legacy here is hardware specification level or qemu software
>> design level?
>it's QEMU only, you need to find a version of QEMU (machine type)
>which didn't have re-sizable MemoryRegion and the next version most likely
>would have a knob somewhere in machine class definition saying that we don't
>care about sizes anymore or care about sizes only for previous machine types.
Ok, let me find when we introduced re-sizable MemoryRegion.
Seems I still have some uncertain concepts. Let me discover it one by
one :-)
--
Wei Yang
Help you, Help me
- Re: [Qemu-devel] [RFC PATCH 1/3] hw/arm/virt-acpi-build: use acpi_get_mcfg() to calculate bus number, (continued)
- [Qemu-devel] [RFC PATCH 2/3] hw/arm/virt-acpi-build: remove unnecessary variable mcfg_start, Wei Yang, 2019/03/13
- [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Wei Yang, 2019/03/13
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Igor Mammedov, 2019/03/13
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Wei Yang, 2019/03/13
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Igor Mammedov, 2019/03/13
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Wei Yang, 2019/03/13
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Igor Mammedov, 2019/03/14
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg,
Wei Yang <=
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Wei Yang, 2019/03/16
- Re: [Qemu-devel] [RFC PATCH 3/3] hw/acpi: Extract build_mcfg, Wei Yang, 2019/03/20
Re: [Qemu-devel] [RFC PATCH 0/3] Extract build_mcfg, Igor Mammedov, 2019/03/13