From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>, <mst@redhat.com>,
<qemu-devel@nongnu.org>, <ankita@nvidia.com>,
<linuxarm@huawei.com>, <linux-cxl@vger.kernel.org>,
<marcel.apfelbaum@gmail.com>, <philmd@linaro.org>,
Richard Henderson <richard.henderson@linaro.org>,
Dave Jiang <dave.jiang@intel.com>,
Huang Ying <ying.huang@intel.com>,
Paolo Bonzini <pbonzini@redhat.com>, <eduardo@habkost.net>,
Michael Roth <michael.roth@amd.com>,
Ani Sinha <anisinha@redhat.com>
Subject: Re: [PATCH v5 10/13] hw/acpi: Generic Port Affinity Structure support
Date: Wed, 28 Aug 2024 17:54:05 +0100 [thread overview]
Message-ID: <20240828175405.00004b4b@Huawei.com> (raw)
In-Reply-To: <20240715164841.1979fdea@imammedo.users.ipa.redhat.com>
On Mon, 15 Jul 2024 16:48:41 +0200
Igor Mammedov <imammedo@redhat.com> wrote:
> On Fri, 12 Jul 2024 12:08:14 +0100
> Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
>
> > These are very similar to the recently added Generic Initiators
> > but instead of representing an initiator of memory traffic they
> > represent an edge point beyond which may lie either targets or
> > initiators. Here we add these ports such that they may
> > be targets of hmat_lb records to describe the latency and
> > bandwidth from host side initiators to the port. A discoverable
> > mechanism such as UEFI CDAT read from CXL devices and switches
> > is used to discover the remainder of the path, and the OS can build
> > up full latency and bandwidth numbers as need for work and data
> > placement decisions.
> >
> > Acked-by: Markus Armbruster <armbru@redhat.com>
> > Tested-by: "Huang, Ying" <ying.huang@intel.com>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> ACPI tables generation LGTM
> As for the rest my review is perfunctory mostly.
Hi Igor,
Given I guess we will soon be in the 9.2 cycle, revisiting this
to prepare a v6.
Added missing parameter descriptions for properties in here
and an additional patch for the ones missing for
generic initiators. Another patch fixes the uint32_t fragilty
you pointed out for generic initiators (fixed here as well)
2 things remain, the docs and the question you are asked Markus.
See inline.
>
> > ---
> > v5: Push the definition of TYPE_ACPI_GENERIC_PORT down into the
> > c file (similar to TYPE_ACPI_GENERIC_INITIATOR in earlier patch)
> > ---
> > qapi/qom.json | 34 +++++++++
> > include/hw/acpi/aml-build.h | 4 +
> > include/hw/acpi/pci.h | 2 +-
> > include/hw/pci/pci_bridge.h | 1 +
> > hw/acpi/aml-build.c | 40 ++++++++++
> > hw/acpi/pci.c | 112 +++++++++++++++++++++++++++-
> > hw/arm/virt-acpi-build.c | 2 +-
> > hw/i386/acpi-build.c | 2 +-
> > hw/pci-bridge/pci_expander_bridge.c | 1 -
> > 9 files changed, 193 insertions(+), 5 deletions(-)
> >
> > diff --git a/qapi/qom.json b/qapi/qom.json
> > index 8e75a419c3..b97c031b73 100644
> > --- a/qapi/qom.json
> > +++ b/qapi/qom.json
> > @@ -838,6 +838,38 @@
> > 'data': { 'pci-dev': 'str',
> > 'node': 'uint32' } }
> >
> > +##
> > +# @AcpiGenericPortProperties:
> > +#
> > +# Properties for acpi-generic-port objects.
> > +#
> > +# @pci-bus: QOM path of the PCI bus of the hostbridge associated with
> > +# this SRAT Generic Port Affinity Structure. This is the same as
> > +# the bus parameter for the root ports attached to this host
> > +# bridge. The resulting SRAT Generic Port Affinity Structure will
> > +# refer to the ACPI object in DSDT that represents the host bridge
> > +# (e.g. ACPI0016 for CXL host bridges). See ACPI 6.5 Section
> > +# 5.2.16.7 for more information.
> > +#
>
> > +# @node: Similar to a NUMA node ID, but instead of providing a
> > +# reference point used for defining NUMA distances and access
> > +# characteristics to memory or from an initiator (e.g. CPU), this
> > +# node defines the boundary point between non-discoverable system
> > +# buses which must be described by firmware, and a discoverable
> > +# bus. NUMA distances and access characteristics are defined to
> > +# and from that point. For system software to establish full
> > +# initiator to target characteristics this information must be
> > +# combined with information retrieved from the discoverable part
> > +# of the path. An example would use CDAT (see UEFI.org)
> > +# information read from devices and switches in conjunction with
> > +# link characteristics read from PCIe Configuration space.
>
> you lost me here (even reading this several time doesn't help).
> Perhaps I lack specific domain knowledge, but is there a way to make it
> more comprehensible for layman?
I've had a few passes and clearly still failing :(
Maybe an example is the way to go? Does the following help?
(replacing the 'An example sentence' above).
# For example, a CXL Memory device M is directly
# plugged into a CXL root port P which is part of a
# CXL root bridge B. To calculate latency from a CPU in
# the host to the memory on M, the latency from that CPU
# to the bridge B (and hence port P)* must be added
# to the latency due to the CXL Link between P and M
# (calculated from link status registers) and that from
# the CXL port on device M to the actual memory (read from
# CDAT via a mailbox on the device).
# The CPU to root bridge latency (*) is provided by ACPI HMAT.
# HMAT latency data is indexed with the combination of the
# proximity domain for the CPU and that for the root bridge.
# This node value is the root bridge part of that index pair.
...
> > +static int build_acpi_generic_port(Object *obj, void *opaque)
> > +{
> > + MachineState *ms = MACHINE(qdev_get_machine());
> > + const char *hid = "ACPI0016";
> > + GArray *table_data = opaque;
> > + AcpiGenericPort *gp;
> > + uint32_t uid;
> > + Object *o;
> > +
> > + if (!object_dynamic_cast(obj, TYPE_ACPI_GENERIC_PORT)) {
> > + return 0;
> > + }
> > +
> > + gp = ACPI_GENERIC_PORT(obj);
> > +
> > + if (gp->node >= ms->numa_state->num_nodes) {
>
> > + error_printf("%s: node %d is invalid.\n",
> > + TYPE_ACPI_GENERIC_PORT, gp->node);
> > + exit(1);
>
> not sure,
> maybe use error_fatal instead of using exit(1)?
>
> CCing Markus to check if it's ok.
Markus?
>
>
> > + }
> > +
> > + o = object_resolve_path_type(gp->pci_bus, TYPE_PXB_CXL_BUS, NULL);
> > + if (!o) {
> > + error_printf("%s: device must be a CXL host bridge.\n",
> > + TYPE_ACPI_GENERIC_PORT);
> > + exit(1);
> > + }
> ditto
>
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Igor Mammedov <imammedo@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>, <mst@redhat.com>,
<qemu-devel@nongnu.org>, <ankita@nvidia.com>,
<linuxarm@huawei.com>, <linux-cxl@vger.kernel.org>,
<marcel.apfelbaum@gmail.com>, <philmd@linaro.org>,
Richard Henderson <richard.henderson@linaro.org>,
Dave Jiang <dave.jiang@intel.com>,
Huang Ying <ying.huang@intel.com>,
Paolo Bonzini <pbonzini@redhat.com>, <eduardo@habkost.net>,
Michael Roth <michael.roth@amd.com>,
Ani Sinha <anisinha@redhat.com>
Subject: Re: [PATCH v5 10/13] hw/acpi: Generic Port Affinity Structure support
Date: Wed, 28 Aug 2024 17:54:05 +0100 [thread overview]
Message-ID: <20240828175405.00004b4b@Huawei.com> (raw)
In-Reply-To: <20240715164841.1979fdea@imammedo.users.ipa.redhat.com>
On Mon, 15 Jul 2024 16:48:41 +0200
Igor Mammedov <imammedo@redhat.com> wrote:
> On Fri, 12 Jul 2024 12:08:14 +0100
> Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
>
> > These are very similar to the recently added Generic Initiators
> > but instead of representing an initiator of memory traffic they
> > represent an edge point beyond which may lie either targets or
> > initiators. Here we add these ports such that they may
> > be targets of hmat_lb records to describe the latency and
> > bandwidth from host side initiators to the port. A discoverable
> > mechanism such as UEFI CDAT read from CXL devices and switches
> > is used to discover the remainder of the path, and the OS can build
> > up full latency and bandwidth numbers as need for work and data
> > placement decisions.
> >
> > Acked-by: Markus Armbruster <armbru@redhat.com>
> > Tested-by: "Huang, Ying" <ying.huang@intel.com>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> ACPI tables generation LGTM
> As for the rest my review is perfunctory mostly.
Hi Igor,
Given I guess we will soon be in the 9.2 cycle, revisiting this
to prepare a v6.
Added missing parameter descriptions for properties in here
and an additional patch for the ones missing for
generic initiators. Another patch fixes the uint32_t fragilty
you pointed out for generic initiators (fixed here as well)
2 things remain, the docs and the question you are asked Markus.
See inline.
>
> > ---
> > v5: Push the definition of TYPE_ACPI_GENERIC_PORT down into the
> > c file (similar to TYPE_ACPI_GENERIC_INITIATOR in earlier patch)
> > ---
> > qapi/qom.json | 34 +++++++++
> > include/hw/acpi/aml-build.h | 4 +
> > include/hw/acpi/pci.h | 2 +-
> > include/hw/pci/pci_bridge.h | 1 +
> > hw/acpi/aml-build.c | 40 ++++++++++
> > hw/acpi/pci.c | 112 +++++++++++++++++++++++++++-
> > hw/arm/virt-acpi-build.c | 2 +-
> > hw/i386/acpi-build.c | 2 +-
> > hw/pci-bridge/pci_expander_bridge.c | 1 -
> > 9 files changed, 193 insertions(+), 5 deletions(-)
> >
> > diff --git a/qapi/qom.json b/qapi/qom.json
> > index 8e75a419c3..b97c031b73 100644
> > --- a/qapi/qom.json
> > +++ b/qapi/qom.json
> > @@ -838,6 +838,38 @@
> > 'data': { 'pci-dev': 'str',
> > 'node': 'uint32' } }
> >
> > +##
> > +# @AcpiGenericPortProperties:
> > +#
> > +# Properties for acpi-generic-port objects.
> > +#
> > +# @pci-bus: QOM path of the PCI bus of the hostbridge associated with
> > +# this SRAT Generic Port Affinity Structure. This is the same as
> > +# the bus parameter for the root ports attached to this host
> > +# bridge. The resulting SRAT Generic Port Affinity Structure will
> > +# refer to the ACPI object in DSDT that represents the host bridge
> > +# (e.g. ACPI0016 for CXL host bridges). See ACPI 6.5 Section
> > +# 5.2.16.7 for more information.
> > +#
>
> > +# @node: Similar to a NUMA node ID, but instead of providing a
> > +# reference point used for defining NUMA distances and access
> > +# characteristics to memory or from an initiator (e.g. CPU), this
> > +# node defines the boundary point between non-discoverable system
> > +# buses which must be described by firmware, and a discoverable
> > +# bus. NUMA distances and access characteristics are defined to
> > +# and from that point. For system software to establish full
> > +# initiator to target characteristics this information must be
> > +# combined with information retrieved from the discoverable part
> > +# of the path. An example would use CDAT (see UEFI.org)
> > +# information read from devices and switches in conjunction with
> > +# link characteristics read from PCIe Configuration space.
>
> you lost me here (even reading this several time doesn't help).
> Perhaps I lack specific domain knowledge, but is there a way to make it
> more comprehensible for layman?
I've had a few passes and clearly still failing :(
Maybe an example is the way to go? Does the following help?
(replacing the 'An example sentence' above).
# For example, a CXL Memory device M is directly
# plugged into a CXL root port P which is part of a
# CXL root bridge B. To calculate latency from a CPU in
# the host to the memory on M, the latency from that CPU
# to the bridge B (and hence port P)* must be added
# to the latency due to the CXL Link between P and M
# (calculated from link status registers) and that from
# the CXL port on device M to the actual memory (read from
# CDAT via a mailbox on the device).
# The CPU to root bridge latency (*) is provided by ACPI HMAT.
# HMAT latency data is indexed with the combination of the
# proximity domain for the CPU and that for the root bridge.
# This node value is the root bridge part of that index pair.
...
> > +static int build_acpi_generic_port(Object *obj, void *opaque)
> > +{
> > + MachineState *ms = MACHINE(qdev_get_machine());
> > + const char *hid = "ACPI0016";
> > + GArray *table_data = opaque;
> > + AcpiGenericPort *gp;
> > + uint32_t uid;
> > + Object *o;
> > +
> > + if (!object_dynamic_cast(obj, TYPE_ACPI_GENERIC_PORT)) {
> > + return 0;
> > + }
> > +
> > + gp = ACPI_GENERIC_PORT(obj);
> > +
> > + if (gp->node >= ms->numa_state->num_nodes) {
>
> > + error_printf("%s: node %d is invalid.\n",
> > + TYPE_ACPI_GENERIC_PORT, gp->node);
> > + exit(1);
>
> not sure,
> maybe use error_fatal instead of using exit(1)?
>
> CCing Markus to check if it's ok.
Markus?
>
>
> > + }
> > +
> > + o = object_resolve_path_type(gp->pci_bus, TYPE_PXB_CXL_BUS, NULL);
> > + if (!o) {
> > + error_printf("%s: device must be a CXL host bridge.\n",
> > + TYPE_ACPI_GENERIC_PORT);
> > + exit(1);
> > + }
> ditto
>
next prev parent reply other threads:[~2024-08-28 16:54 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-12 11:08 [PATCH v5 00/13] acpi: NUMA nodes for CXL HB as GP + complex NUMA test Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 01/13] hw/acpi: Fix ordering of BDF in Generic Initiator PCI Device Handle Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 02/13] hw/acpi/GI: Fix trivial parameter alignment issue Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 03/13] hw/acpi: Move AML building code for Generic Initiators to aml_build.c Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 04/13] hw/acpi: Rename build_all_acpi_generic_initiators() to build_acpi_generic_initiator() Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 05/13] hw/pci: Add a busnr property to pci_props and use for acpi/gi Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 06/13] acpi/pci: Move Generic Initiator object handling into acpi/pci.* Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-15 14:28 ` Igor Mammedov
2024-07-15 14:28 ` Igor Mammedov
2024-07-12 11:08 ` [PATCH v5 07/13] hw/pci-bridge: Add acpi_uid property to TYPE_PXB_BUS Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-15 14:29 ` Igor Mammedov
2024-07-12 11:08 ` [PATCH v5 08/13] hw/i386/acpi: Use TYPE_PXB_BUS property acpi_uid for DSDT Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-15 14:29 ` Igor Mammedov
2024-07-12 11:08 ` [PATCH v5 09/13] hw/pci-host/gpex-acpi: Use acpi_uid property Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-15 14:29 ` Igor Mammedov
2024-07-12 11:08 ` [PATCH v5 10/13] hw/acpi: Generic Port Affinity Structure support Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-15 14:48 ` Igor Mammedov
2024-07-17 15:02 ` Jonathan Cameron
2024-07-17 15:02 ` Jonathan Cameron via
2024-07-17 15:11 ` Michael S. Tsirkin
2024-07-17 15:40 ` Jonathan Cameron
2024-07-17 15:40 ` Jonathan Cameron via
2024-08-28 16:54 ` Jonathan Cameron [this message]
2024-08-28 16:54 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 11/13] bios-tables-test: Allow for new acpihmat-generic-x test data Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 12/13] bios-tables-test: Add complex SRAT / HMAT test for GI GP Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
2024-07-12 11:08 ` [PATCH v5 13/13] bios-tables-test: Add data for complex numa test (GI, GP etc) Jonathan Cameron
2024-07-12 11:08 ` Jonathan Cameron via
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=20240828175405.00004b4b@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=anisinha@redhat.com \
--cc=ankita@nvidia.com \
--cc=armbru@redhat.com \
--cc=dave.jiang@intel.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=ying.huang@intel.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.