qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Eric Auger <eric.auger@redhat.com>
Cc: eric.auger.pro@gmail.com, qemu-devel@nongnu.org,
	qemu-arm@nongnu.org, peter.maydell@linaro.org,
	gustavo.romero@linaro.org, anisinha@redhat.com, mst@redhat.com,
	shannon.zhaosl@gmail.com, pbonzini@redhat.com,
	Jonathan.Cameron@huawei.com, philmd@linaro.org,
	alex.bennee@linaro.org
Subject: Re: [PATCH v2 15/25] hw/i386/acpi-build: Introduce and use acpi_get_pci_host
Date: Tue, 27 May 2025 15:58:31 +0200	[thread overview]
Message-ID: <20250527155831.45fcd421@imammedo.users.ipa.redhat.com> (raw)
In-Reply-To: <20250527074224.1197793-16-eric.auger@redhat.com>

On Tue, 27 May 2025 09:40:17 +0200
Eric Auger <eric.auger@redhat.com> wrote:

> pcihp acpi_set_pci_info() generic code currently uses
> acpi_get_i386_pci_host() to retrieve the pci host bridge.
> 
> Let's rename acpi_get_i386_pci_host into acpi_get_pci_host and
> move it in pci generic code.
> 
> The helper is augmented with the support of ARM GPEX.
> 
> Also instead of using the machine child property to retrieve
> the PCI host bridge, we search for the actual object type using
> object_resolve_type_unambiguous().
> 
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
> 
> ---
> 
> v1 -> v2
> - described the fact we changed the implementation of
>   acpi_get_pci_host() in the commit msg.
> ---
>  include/hw/acpi/pci.h |  2 ++
>  hw/acpi/pci.c         | 20 ++++++++++++++++++++
>  hw/acpi/pcihp.c       |  3 ++-
>  hw/i386/acpi-build.c  | 24 ++++--------------------
>  4 files changed, 28 insertions(+), 21 deletions(-)
> 
> diff --git a/include/hw/acpi/pci.h b/include/hw/acpi/pci.h
> index 4dca22c0e2..310cbd02db 100644
> --- a/include/hw/acpi/pci.h
> +++ b/include/hw/acpi/pci.h
> @@ -41,4 +41,6 @@ void build_pci_bridge_aml(AcpiDevAmlIf *adev, Aml *scope);
>  
>  void build_srat_generic_affinity_structures(GArray *table_data);
>  
> +Object *acpi_get_pci_host(void);
> +
>  #endif
> diff --git a/hw/acpi/pci.c b/hw/acpi/pci.c
> index d511a85029..4191886ebe 100644
> --- a/hw/acpi/pci.c
> +++ b/hw/acpi/pci.c
> @@ -26,6 +26,7 @@
>  #include "qemu/osdep.h"
>  #include "qemu/error-report.h"
>  #include "qom/object_interfaces.h"
> +#include "qom/object.h"
>  #include "qapi/error.h"
>  #include "hw/boards.h"
>  #include "hw/acpi/aml-build.h"
> @@ -33,6 +34,9 @@
>  #include "hw/pci/pci_bridge.h"
>  #include "hw/pci/pci_device.h"
>  #include "hw/pci/pcie_host.h"
> +#include "hw/pci-host/i440fx.h"
> +#include "hw/pci-host/q35.h"
> +#include "hw/pci-host/gpex.h"
>  
>  /*
>   * PCI Firmware Specification, Revision 3.0
> @@ -301,3 +305,19 @@ void build_srat_generic_affinity_structures(GArray *table_data)
>      object_child_foreach_recursive(object_get_root(), build_acpi_generic_port,
>                                     table_data);
>  }
> +
> +Object *acpi_get_pci_host(void)
> +{
> +    Object *host;
> +
> +    host = object_resolve_type_unambiguous(TYPE_I440FX_PCI_HOST_BRIDGE, NULL);
> +    if (host) {
> +        return host;
> +    }
> +    host = object_resolve_type_unambiguous(TYPE_Q35_HOST_DEVICE, NULL);
> +    if (host) {
> +        return host;
> +    }
> +    host = object_resolve_type_unambiguous(TYPE_GPEX_HOST, NULL);
> +    return host;

while it will work, it's getting ridiculous.
(it's not likely to affect performance but if it can be helped,
I'd rather avoid searching)

Can we just reuse host bridge bus in stored in  pcihp state?
aka we do pass root_bus to acpi_pcihp_init() and then there is
AcpiPciHpState::root

then there are other places that call acpi_get_i386_pci_host()
to get root bus, can't we just get it from machine state that
callers get and pass it down as an argument? 


> +}
> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
> index 942669ea89..d800371ddc 100644
> --- a/hw/acpi/pcihp.c
> +++ b/hw/acpi/pcihp.c
> @@ -36,6 +36,7 @@
>  #include "hw/pci-bridge/xio3130_downstream.h"
>  #include "hw/i386/acpi-build.h"
>  #include "hw/acpi/acpi.h"
> +#include "hw/acpi/pci.h"
>  #include "hw/pci/pci_bus.h"
>  #include "migration/vmstate.h"
>  #include "qapi/error.h"
> @@ -102,7 +103,7 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque)
>  static void acpi_set_pci_info(bool has_bridge_hotplug)
>  {
>      static bool bsel_is_set;
> -    Object *host = acpi_get_i386_pci_host();
> +    Object *host = acpi_get_pci_host();
>      PCIBus *bus;
>      BSELInfo info = { .bsel_alloc = ACPI_PCIHP_BSEL_DEFAULT,
>                        .has_bridge_hotplug = has_bridge_hotplug };
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index fe8bc62c03..6feb99e9eb 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -269,27 +269,11 @@ static void acpi_get_misc_info(AcpiMiscInfo *info)
>  #endif
>  }
>  
> -/*
> - * Because of the PXB hosts we cannot simply query TYPE_PCI_HOST_BRIDGE.
> - * On i386 arch we only have two pci hosts, so we can look only for them.
> - */
> -Object *acpi_get_i386_pci_host(void)
> -{
> -    PCIHostState *host;
> -
> -    host = PCI_HOST_BRIDGE(object_resolve_path("/machine/i440fx", NULL));
> -    if (!host) {
> -        host = PCI_HOST_BRIDGE(object_resolve_path("/machine/q35", NULL));
> -    }
> -
> -    return OBJECT(host);
> -}
> -
>  static void acpi_get_pci_holes(Range *hole, Range *hole64)
>  {
>      Object *pci_host;
>  
> -    pci_host = acpi_get_i386_pci_host();
> +    pci_host = acpi_get_pci_host();
>  
>      if (!pci_host) {
>          return;
> @@ -1245,7 +1229,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
>  
>      sb_scope = aml_scope("\\_SB");
>      {
> -        Object *pci_host = acpi_get_i386_pci_host();
> +        Object *pci_host = acpi_get_pci_host();
>  
>          if (pci_host) {
>              PCIBus *pbus = PCI_HOST_BRIDGE(pci_host)->bus;
> @@ -1306,7 +1290,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
>      if (pm->pcihp_bridge_en || pm->pcihp_root_en) {
>          bool has_pcnt;
>  
> -        Object *pci_host = acpi_get_i386_pci_host();
> +        Object *pci_host = acpi_get_pci_host();
>          PCIBus *b = PCI_HOST_BRIDGE(pci_host)->bus;
>  
>          scope = aml_scope("\\_SB.PCI0");
> @@ -1946,7 +1930,7 @@ static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
>      Object *pci_host;
>      QObject *o;
>  
> -    pci_host = acpi_get_i386_pci_host();
> +    pci_host = acpi_get_pci_host();
>      if (!pci_host) {
>          return false;
>      }



  reply	other threads:[~2025-05-27 13:58 UTC|newest]

Thread overview: 108+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-27  7:40 [PATCH v2 00/25] ACPI PCI Hotplug support on ARM Eric Auger
2025-05-27  7:40 ` [PATCH v2 01/25] hw/i386/acpi-build: Make aml_pci_device_dsm() static Eric Auger
2025-05-27 12:23   ` Igor Mammedov
2025-05-30  8:40   ` Jonathan Cameron via
2025-05-27  7:40 ` [PATCH v2 02/25] hw/arm/virt: Introduce machine state acpi pcihp flags and props Eric Auger
2025-05-27 11:58   ` Igor Mammedov
2025-05-27 13:54     ` Eric Auger
2025-05-28 10:33       ` Igor Mammedov
2025-06-11  6:53         ` Eric Auger
2025-06-11  8:45           ` Igor Mammedov
2025-06-11  8:50             ` Eric Auger
2025-06-12 12:55               ` Igor Mammedov
2025-06-13  3:01                 ` Gustavo Romero
2025-06-13  5:05                   ` Eric Auger
2025-06-13 13:39                     ` Gustavo Romero
2025-06-14  8:04                       ` Eric Auger
2025-06-11  6:47     ` Eric Auger
2025-06-11  8:49       ` Igor Mammedov
2025-06-11  8:56         ` Eric Auger
2025-06-12 13:00           ` Igor Mammedov
2025-06-12 13:54             ` Eric Auger
2025-05-30  8:58   ` Jonathan Cameron via
2025-05-27  7:40 ` [PATCH v2 03/25] hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp Eric Auger
2025-05-27 12:08   ` Igor Mammedov
2025-05-30  9:06   ` Jonathan Cameron via
2025-05-27  7:40 ` [PATCH v2 04/25] hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to acpi_dsdt_add_pci_osc Eric Auger
2025-05-27 12:27   ` Igor Mammedov
2025-05-30  9:27   ` Jonathan Cameron via
2025-05-30  9:28     ` Jonathan Cameron via
2025-06-11 12:05     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 05/25] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation Eric Auger
2025-05-27 12:31   ` Igor Mammedov
2025-05-30 10:02   ` Jonathan Cameron via
2025-05-30 12:05     ` Igor Mammedov
2025-05-30 15:00       ` Jonathan Cameron via
2025-06-02 10:18         ` Igor Mammedov
2025-06-11 12:18     ` Eric Auger
2025-06-11 12:22     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 06/25] hw/pci-host/gpex-acpi: Propagate hotplug type info from virt machine downto gpex Eric Auger
2025-05-27 12:33   ` Igor Mammedov
2025-06-11  9:00     ` Eric Auger
2025-06-12 13:25       ` Igor Mammedov
2025-05-30 10:14   ` Jonathan Cameron via
2025-05-30 12:11     ` Igor Mammedov
2025-06-11  9:13     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 07/25] hw/i386/acpi-build: Turn build_q35_osc_method into a generic method Eric Auger
2025-05-27 12:35   ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 08/25] tests/qtest/bios-tables-test: Prepare for changes in the DSDT table Eric Auger
2025-05-27 12:38   ` Igor Mammedov
2025-05-27 13:03     ` Igor Mammedov
2025-06-02  5:45       ` Gustavo Romero
2025-06-11  9:45         ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 09/25] hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method Eric Auger
2025-05-27 13:04   ` Igor Mammedov
2025-05-30 10:05   ` Jonathan Cameron via
2025-06-11 12:25     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 10/25] tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change Eric Auger
2025-05-27 13:05   ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 11/25] hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper Eric Auger
2025-05-27 13:09   ` Igor Mammedov
2025-05-30 10:17   ` Jonathan Cameron via
2025-06-05 17:06     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 12/25] hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug Eric Auger
2025-05-27 13:12   ` Igor Mammedov
2025-05-30 10:18   ` Jonathan Cameron via
2025-05-27  7:40 ` [PATCH v2 13/25] hw/i386/acpi-build: Move build_append_notification_callback to pcihp Eric Auger
2025-05-27 13:37   ` Igor Mammedov
2025-05-30 10:19   ` Jonathan Cameron via
2025-05-27  7:40 ` [PATCH v2 14/25] hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots " Eric Auger
2025-05-27 13:43   ` Igor Mammedov
2025-05-30 10:24   ` Jonathan Cameron via
2025-06-05 16:03     ` Eric Auger
2025-05-27  7:40 ` [PATCH v2 15/25] hw/i386/acpi-build: Introduce and use acpi_get_pci_host Eric Auger
2025-05-27 13:58   ` Igor Mammedov [this message]
2025-05-27  7:40 ` [PATCH v2 16/25] hw/i386/acpi-build: Move aml_pci_edsm to a generic place Eric Auger
2025-05-27 14:00   ` Igor Mammedov
2025-05-27 14:07     ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 17/25] hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI hotplug Eric Auger
2025-05-27 14:12   ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 18/25] hw/acpi/ged: Prepare the device to react to PCI hotplug events Eric Auger
2025-05-27  7:40 ` [PATCH v2 19/25] hw/acpi/ged: Call pcihp plug callbacks in hotplug handler implementation Eric Auger
2025-05-27 14:21   ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 20/25] hw/acpi/ged: Support migration of AcpiPciHpState Eric Auger
2025-05-27 15:14   ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 21/25] hw/core/sysbus: Introduce sysbus_mmio_map_name() helper Eric Auger
2025-05-27  7:40 ` [PATCH v2 22/25] hw/arm/virt: Let virt support pci hotplug/unplug GED event Eric Auger
2025-05-27 15:21   ` Philippe Mathieu-Daudé
2025-05-27 15:56   ` Igor Mammedov
2025-05-27 16:44     ` Gustavo Romero
2025-05-27 19:16       ` Gustavo Romero
2025-05-28 10:15       ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 23/25] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks Eric Auger
2025-05-27  7:40 ` [PATCH v2 24/25] tests/qtest/bios-tables-test: Keep ACPI PCI hotplug off Eric Auger
2025-05-28  9:38   ` Igor Mammedov
2025-05-28  9:48     ` Eric Auger
2025-05-28 10:49       ` Igor Mammedov
2025-06-02  6:16       ` Gustavo Romero
2025-05-28 12:41     ` Gustavo Romero
2025-05-28 13:02       ` Igor Mammedov
2025-05-28 15:04         ` Gustavo Romero
2025-05-30 11:51           ` Igor Mammedov
2025-06-02  5:35             ` Gustavo Romero
2025-06-02  6:06             ` Gustavo Romero
2025-06-10 14:29               ` Gustavo Romero
2025-06-11  8:54                 ` Igor Mammedov
2025-06-11 13:14                   ` Gustavo Romero
2025-06-12 12:50                     ` Igor Mammedov
2025-05-27  7:40 ` [PATCH v2 25/25] hw/arm/virt: Use ACPI PCI hotplug by default Eric Auger

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=20250527155831.45fcd421@imammedo.users.ipa.redhat.com \
    --to=imammedo@redhat.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=alex.bennee@linaro.org \
    --cc=anisinha@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=eric.auger@redhat.com \
    --cc=gustavo.romero@linaro.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --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 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).