From: Igor Mammedov <imammedo@redhat.com>
To: Samuel Ortiz <sameo@linux.intel.com>
Cc: qemu-devel@nongnu.org, Shannon Zhao <shannon.zhaosl@gmail.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Anthony Perard <anthony.perard@citrix.com>,
Richard Henderson <rth@twiddle.net>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
xen-devel@lists.xenproject.org,
Paolo Bonzini <pbonzini@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
qemu-arm@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 01/24] hw: i386: Decouple the ACPI build from the PC machine type
Date: Fri, 9 Nov 2018 15:23:16 +0100 [thread overview]
Message-ID: <20181109152316.43b79217@redhat.com> (raw)
In-Reply-To: <20181105014047.26447-2-sameo@linux.intel.com>
On Mon, 5 Nov 2018 02:40:24 +0100
Samuel Ortiz <sameo@linux.intel.com> wrote:
> ACPI tables are platform and machine type and even architecture
> agnostic, and as such we want to provide an internal ACPI API that
> only depends on platform agnostic information.
>
> For the x86 architecture, in order to build ACPI tables independently
> from the PC or Q35 machine types, we are moving a few MachineState
> structure fields into a machine type agnostic structure called
> AcpiConfiguration. The structure fields we move are:
It's not obvious why new structure is needed, especially at
the beginning of series. We probably should place this patch
much later in the series (if we need it at all) and try
generalize a much as possible without using it.
And try to come up with an API that doesn't need centralized collection
of data somehow related to ACPI (most of the fields here are not generic
and applicable to a specific board/target).
For generic API, I'd prefer a separate building blocks
like build_fadt()/... that take as an input only parameters
necessary to compose a table/aml part with occasional board
interface hooks instead of all encompassing AcpiConfiguration
and board specific 'acpi_build' that would use them when/if needed.
We probably should split series into several smaller
(if possible independent) ones, so people won't be scared of
its sheer size and run away from reviewing it.
That way it would be easier to review, amend certain parts and merge.
acpi_setup() & co probably should be the last things that's are
generalized as they are called by concrete boards and might collect
board specific data and apply compat workarounds for building ACPI tables
(assuming that we won't push non generic data into generic API).
See more comments below
> HotplugHandler *acpi_dev
> AcpiNVDIMMState acpi_nvdimm_state;
> FWCfgState *fw_cfg
> ram_addr_t below_4g_mem_size, above_4g_mem_size
> bool apic_xrupt_override
> unsigned apic_id_limit
> uint64_t numa_nodes
> uint64_t numa_mem
>
> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
> ---
> hw/i386/acpi-build.h | 4 +-
> include/hw/acpi/acpi.h | 44 ++++++++++
> include/hw/i386/pc.h | 19 ++---
> hw/acpi/cpu_hotplug.c | 9 +-
> hw/arm/virt-acpi-build.c | 10 ---
> hw/i386/acpi-build.c | 136 ++++++++++++++----------------
> hw/i386/pc.c | 176 ++++++++++++++++++++++++---------------
> hw/i386/pc_piix.c | 21 ++---
> hw/i386/pc_q35.c | 21 ++---
> hw/i386/xen/xen-hvm.c | 19 +++--
> 10 files changed, 257 insertions(+), 202 deletions(-)
>
> diff --git a/hw/i386/acpi-build.h b/hw/i386/acpi-build.h
> index 007332e51c..065a1d8250 100644
> --- a/hw/i386/acpi-build.h
> +++ b/hw/i386/acpi-build.h
> @@ -2,6 +2,8 @@
> #ifndef HW_I386_ACPI_BUILD_H
> #define HW_I386_ACPI_BUILD_H
>
> -void acpi_setup(void);
> +#include "hw/acpi/acpi.h"
> +
> +void acpi_setup(MachineState *machine, AcpiConfiguration *acpi_conf);
>
> #endif
> diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h
> index c20ace0d0b..254c8d0cfc 100644
> --- a/include/hw/acpi/acpi.h
> +++ b/include/hw/acpi/acpi.h
> @@ -24,6 +24,8 @@
> #include "exec/memory.h"
> #include "hw/irq.h"
> #include "hw/acpi/acpi_dev_interface.h"
> +#include "hw/hotplug.h"
> +#include "hw/mem/nvdimm.h"
>
> /*
> * current device naming scheme supports up to 256 memory devices
> @@ -186,6 +188,48 @@ extern int acpi_enabled;
> extern char unsigned *acpi_tables;
> extern size_t acpi_tables_len;
>
> +typedef
> +struct AcpiBuildState {
> + /* Copy of table in RAM (for patching). */
> + MemoryRegion *table_mr;
> + /* Is table patched? */
> + bool patched;
> + void *rsdp;
> + MemoryRegion *rsdp_mr;
> + MemoryRegion *linker_mr;
> +} AcpiBuildState;
> +
> +typedef
> +struct AcpiConfiguration {
We used to have a similar intermediate structure PcGuestInfo,
but got rid of it in the end. Even with other questions aside
I'm not quite convinced that it's good idea to reintroduce similar
one again.
> + /* Machine class ACPI settings */
> + int legacy_acpi_table_size;
> + bool rsdp_in_ram;
> + unsigned acpi_data_size;
(*) well, all 2 are the legacy stuff, I'd rather not to push it into
generic API and keep it in the caller as board specific/machine
version code.
> +
> + /* Machine state ACPI settings */
> + HotplugHandler *acpi_dev;
> + AcpiNVDIMMState acpi_nvdimm_state;
> +
> + /*
> + * The fields below are machine settings that
> + * are not ACPI specific. However they are needed
> + * for building ACPI tables and as such should be
> + * carried through the ACPI configuration structure.
> + */
if they are not ACPI specific, then it shouldn't be in acpi
configuration. Some of the fields are compat hacks, which doesn't
belong to generic API so I'd leave them in board specific code
and some are target specific which also doesn't belong in generic
place.
> + bool legacy_cpu_hotplug;
> + bool linuxboot_dma_enabled;
> + FWCfgState *fw_cfg;
> + ram_addr_t below_4g_mem_size, above_4g_mem_size;;
Just curious, how is this applicable to i386/virt machine?
Does it also have memory split in 2 regions?
Is it possible to have only one region?
> + uint64_t numa_nodes;
> + uint64_t *node_mem;
that's kept in PCMachine for the sake of legacy SeaBIOS
which builds ACPI tables on its own.
I'd suggest to use existing globals instead (like ARM does)
so that we wouldn't have to hunt down extra copies later
when those globals are re-factored to properties.
> + bool apic_xrupt_override;
> + unsigned apic_id_limit;
> + PCIHostState *pci_host;
> +
> + /* Build state */
> + AcpiBuildState *build_state;
> +} AcpiConfiguration;
> +
[...]
next prev parent reply other threads:[~2018-11-09 14:23 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-05 1:40 [Qemu-devel] [PATCH v5 00/24] ACPI reorganization for hardware-reduced API addition Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 01/24] hw: i386: Decouple the ACPI build from the PC machine type Samuel Ortiz
2018-11-09 14:23 ` Igor Mammedov [this message]
2018-11-21 14:42 ` Samuel Ortiz
2018-11-22 15:13 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 02/24] hw: acpi: Export ACPI build alignment API Samuel Ortiz
2018-11-09 14:27 ` Igor Mammedov
2018-11-21 14:42 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 03/24] hw: acpi: The RSDP build API can return void Samuel Ortiz
2018-11-06 10:23 ` Paolo Bonzini
2018-11-06 10:43 ` Samuel Ortiz
2018-11-08 14:24 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 04/24] hw: acpi: Export the RSDP build API Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 05/24] hw: acpi: Implement XSDT support for RSDP Samuel Ortiz
2018-11-08 14:16 ` Igor Mammedov
2018-11-08 14:36 ` Samuel Ortiz
2018-11-08 14:53 ` Igor Mammedov
2018-11-19 18:27 ` Michael S. Tsirkin
2018-11-20 8:23 ` Igor Mammedov
2018-11-21 14:42 ` Samuel Ortiz
2018-11-22 16:26 ` Igor Mammedov
2018-11-23 9:36 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 06/24] hw: acpi: Factorize the RSDP build API implementation Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 07/24] hw: acpi: Generalize AML build routines Samuel Ortiz
2018-11-09 13:37 ` Igor Mammedov
2018-11-21 15:00 ` Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 08/24] hw: acpi: Factorize _OSC AML across architectures Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 09/24] hw: i386: Move PCI host definitions to pci_host.h Samuel Ortiz
2018-11-09 14:30 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 10/24] hw: acpi: Export the PCI host and holes getters Samuel Ortiz
2018-11-13 15:59 ` Igor Mammedov
2018-11-21 15:43 ` Samuel Ortiz
2018-11-23 10:55 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 11/24] hw: acpi: Export and generalize the PCI host AML API Samuel Ortiz
2018-11-14 10:55 ` Igor Mammedov
2018-11-21 23:12 ` Samuel Ortiz
2018-11-23 11:04 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 12/24] hw: acpi: Export the MCFG getter Samuel Ortiz
2018-11-15 12:36 ` Igor Mammedov
2018-11-21 23:21 ` Samuel Ortiz
2018-11-27 13:54 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 13/24] hw: acpi: Do not create hotplug method when handler is not defined Samuel Ortiz
2018-11-09 9:12 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 14/24] hw: i386: Make the hotpluggable memory size property more generic Samuel Ortiz
2018-11-15 12:49 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 15/24] hw: i386: Export the i386 ACPI SRAT build method Samuel Ortiz
2018-11-15 13:28 ` Igor Mammedov
2018-11-21 23:27 ` Samuel Ortiz
2018-11-26 15:47 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 16/24] hw: acpi: Fix memory hotplug AML generation error Samuel Ortiz
2018-11-08 14:23 ` Igor Mammedov
2019-01-14 18:35 ` Michael S. Tsirkin
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 17/24] hw: acpi: Export the PCI hotplug API Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 18/24] hw: i386: Export the MADT build method Samuel Ortiz
2018-11-16 9:27 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 19/24] hw: acpi: Retrieve the PCI bus from AcpiPciHpState Samuel Ortiz
2018-11-16 9:39 ` Igor Mammedov
2018-11-16 19:42 ` Boeuf, Sebastien
2018-11-19 15:37 ` Igor Mammedov
2018-11-19 18:02 ` Boeuf, Sebastien
2018-11-20 8:26 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 20/24] hw: acpi: Define ACPI tables builder interface Samuel Ortiz
2018-11-16 16:02 ` Igor Mammedov
2018-11-21 23:57 ` Samuel Ortiz
2018-11-27 14:08 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 21/24] hw: i386: Implement the ACPI builder interface for PC Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 22/24] hw: pci-host: piix: Return PCI host pointer instead of PCI bus Samuel Ortiz
2018-11-16 11:09 ` Igor Mammedov
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 23/24] hw: i386: Set ACPI configuration PCI host pointer Samuel Ortiz
2018-11-05 1:40 ` [Qemu-devel] [PATCH v5 24/24] hw: i386: Refactor PCI host getter Samuel Ortiz
2018-11-16 16:29 ` [Qemu-devel] [PATCH v5 00/24] ACPI reorganization for hardware-reduced API addition Igor Mammedov
2018-11-16 16:37 ` Paolo Bonzini
2018-11-19 15:31 ` Igor Mammedov
2018-11-19 17:14 ` Paolo Bonzini
2018-11-19 18:14 ` Michael S. Tsirkin
2018-11-20 21:35 ` Paolo Bonzini
2018-11-20 12:57 ` Igor Mammedov
2018-11-20 21:36 ` Paolo Bonzini
2018-11-21 12:35 ` Michael S. Tsirkin
2018-11-21 13:50 ` Samuel Ortiz
2018-11-21 13:57 ` Michael S. Tsirkin
2018-11-21 14:15 ` Igor Mammedov
2018-11-21 14:38 ` Samuel Ortiz
2018-11-22 10:39 ` Igor Mammedov
2018-11-22 0:17 ` Samuel Ortiz
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=20181109152316.43b79217@redhat.com \
--to=imammedo@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=ehabkost@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=sameo@linux.intel.com \
--cc=shannon.zhaosl@gmail.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).