From: David Gibson <david@gibson.dropbear.id.au>
To: Peter Xu <peterx@redhat.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Daniel P . Berrange" <berrange@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
qemu-devel@nongnu.org, "Markus Armbruster" <armbru@redhat.com>,
"Eric Auger" <eric.auger@redhat.com>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: Re: [PATCH v2 2/5] pci: Export pci_for_each_device_under_bus*()
Date: Fri, 29 Oct 2021 11:06:10 +1100 [thread overview]
Message-ID: <YXs68hRtHz1c5L/M@yekko> (raw)
In-Reply-To: <20211028043129.38871-3-peterx@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 9982 bytes --]
On Thu, Oct 28, 2021 at 12:31:26PM +0800, Peter Xu wrote:
> They're actually more commonly used than the helper without _under_bus, because
> most callers do have the pci bus on hand. After exporting we can switch a lot
> of the call sites to use these two helpers.
>
> Reviewed-by: David Hildenbrand <david@redhat.com>
> Reviewed-by: Eric Auger <eric.auger@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
ppc parts
Acked-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/i386/acpi-build.c | 5 ++---
> hw/pci/pci.c | 10 +++++-----
> hw/pci/pcie.c | 4 +---
> hw/ppc/spapr_pci.c | 12 +++++-------
> hw/ppc/spapr_pci_nvlink2.c | 7 +++----
> hw/ppc/spapr_pci_vfio.c | 4 ++--
> hw/s390x/s390-pci-bus.c | 5 ++---
> hw/xen/xen_pt.c | 4 ++--
> include/hw/pci/pci.h | 5 +++++
> 9 files changed, 27 insertions(+), 29 deletions(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 81418b7911..a76b17ed92 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -2132,8 +2132,7 @@ dmar_host_bridges(Object *obj, void *opaque)
> PCIBus *bus = PCI_HOST_BRIDGE(obj)->bus;
>
> if (bus && !pci_bus_bypass_iommu(bus)) {
> - pci_for_each_device(bus, pci_bus_num(bus), insert_scope,
> - scope_blob);
> + pci_for_each_device_under_bus(bus, insert_scope, scope_blob);
> }
> }
>
> @@ -2339,7 +2338,7 @@ ivrs_host_bridges(Object *obj, void *opaque)
> PCIBus *bus = PCI_HOST_BRIDGE(obj)->bus;
>
> if (bus && !pci_bus_bypass_iommu(bus)) {
> - pci_for_each_device(bus, pci_bus_num(bus), insert_ivhd, ivhd_blob);
> + pci_for_each_device_under_bus(bus, insert_ivhd, ivhd_blob);
> }
> }
>
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index 17e59cb3a3..4a84e478ce 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -1654,9 +1654,9 @@ static const pci_class_desc pci_class_descriptions[] =
> { 0, NULL}
> };
>
> -static void pci_for_each_device_under_bus_reverse(PCIBus *bus,
> - pci_bus_dev_fn fn,
> - void *opaque)
> +void pci_for_each_device_under_bus_reverse(PCIBus *bus,
> + pci_bus_dev_fn fn,
> + void *opaque)
> {
> PCIDevice *d;
> int devfn;
> @@ -1679,8 +1679,8 @@ void pci_for_each_device_reverse(PCIBus *bus, int bus_num,
> }
> }
>
> -static void pci_for_each_device_under_bus(PCIBus *bus,
> - pci_bus_dev_fn fn, void *opaque)
> +void pci_for_each_device_under_bus(PCIBus *bus,
> + pci_bus_dev_fn fn, void *opaque)
> {
> PCIDevice *d;
> int devfn;
> diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
> index 6e95d82903..914a9bf3d1 100644
> --- a/hw/pci/pcie.c
> +++ b/hw/pci/pcie.c
> @@ -694,9 +694,7 @@ void pcie_cap_slot_write_config(PCIDevice *dev,
> (!(old_slt_ctl & PCI_EXP_SLTCTL_PCC) ||
> (old_slt_ctl & PCI_EXP_SLTCTL_PIC_OFF) != PCI_EXP_SLTCTL_PIC_OFF)) {
> PCIBus *sec_bus = pci_bridge_get_sec_bus(PCI_BRIDGE(dev));
> - pci_for_each_device(sec_bus, pci_bus_num(sec_bus),
> - pcie_unplug_device, NULL);
> -
> + pci_for_each_device_under_bus(sec_bus, pcie_unplug_device, NULL);
> pci_word_test_and_clear_mask(exp_cap + PCI_EXP_SLTSTA,
> PCI_EXP_SLTSTA_PDS);
> if (dev->cap_present & QEMU_PCIE_LNKSTA_DLLLA ||
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 7430bd6314..5bfd4aa9e5 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -1317,8 +1317,7 @@ static int spapr_dt_pci_bus(SpaprPhbState *sphb, PCIBus *bus,
> RESOURCE_CELLS_SIZE));
>
> assert(bus);
> - pci_for_each_device_reverse(bus, pci_bus_num(bus),
> - spapr_dt_pci_device_cb, &cbinfo);
> + pci_for_each_device_under_bus_reverse(bus, spapr_dt_pci_device_cb, &cbinfo);
> if (cbinfo.err) {
> return cbinfo.err;
> }
> @@ -2306,8 +2305,8 @@ static void spapr_phb_pci_enumerate_bridge(PCIBus *bus, PCIDevice *pdev,
> return;
> }
>
> - pci_for_each_device(sec_bus, pci_bus_num(sec_bus),
> - spapr_phb_pci_enumerate_bridge, bus_no);
> + pci_for_each_device_under_bus(sec_bus, spapr_phb_pci_enumerate_bridge,
> + bus_no);
> pci_default_write_config(pdev, PCI_SUBORDINATE_BUS, *bus_no, 1);
> }
>
> @@ -2316,9 +2315,8 @@ static void spapr_phb_pci_enumerate(SpaprPhbState *phb)
> PCIBus *bus = PCI_HOST_BRIDGE(phb)->bus;
> unsigned int bus_no = 0;
>
> - pci_for_each_device(bus, pci_bus_num(bus),
> - spapr_phb_pci_enumerate_bridge,
> - &bus_no);
> + pci_for_each_device_under_bus(bus, spapr_phb_pci_enumerate_bridge,
> + &bus_no);
>
> }
>
> diff --git a/hw/ppc/spapr_pci_nvlink2.c b/hw/ppc/spapr_pci_nvlink2.c
> index 8ef9b40a18..7fb0cf4d04 100644
> --- a/hw/ppc/spapr_pci_nvlink2.c
> +++ b/hw/ppc/spapr_pci_nvlink2.c
> @@ -164,8 +164,7 @@ static void spapr_phb_pci_collect_nvgpu(PCIBus *bus, PCIDevice *pdev,
> return;
> }
>
> - pci_for_each_device(sec_bus, pci_bus_num(sec_bus),
> - spapr_phb_pci_collect_nvgpu, opaque);
> + pci_for_each_device_under_bus(sec_bus, spapr_phb_pci_collect_nvgpu, opaque);
> }
>
> void spapr_phb_nvgpu_setup(SpaprPhbState *sphb, Error **errp)
> @@ -183,8 +182,8 @@ void spapr_phb_nvgpu_setup(SpaprPhbState *sphb, Error **errp)
> sphb->nvgpus->nv2_atsd_current = sphb->nv2_atsd_win_addr;
>
> bus = PCI_HOST_BRIDGE(sphb)->bus;
> - pci_for_each_device(bus, pci_bus_num(bus),
> - spapr_phb_pci_collect_nvgpu, sphb->nvgpus);
> + pci_for_each_device_under_bus(bus, spapr_phb_pci_collect_nvgpu,
> + sphb->nvgpus);
>
> if (sphb->nvgpus->err) {
> error_propagate(errp, sphb->nvgpus->err);
> diff --git a/hw/ppc/spapr_pci_vfio.c b/hw/ppc/spapr_pci_vfio.c
> index f3b37df8ea..2a76b4e0b5 100644
> --- a/hw/ppc/spapr_pci_vfio.c
> +++ b/hw/ppc/spapr_pci_vfio.c
> @@ -164,8 +164,8 @@ static void spapr_phb_vfio_eeh_clear_dev_msix(PCIBus *bus,
>
> static void spapr_phb_vfio_eeh_clear_bus_msix(PCIBus *bus, void *opaque)
> {
> - pci_for_each_device(bus, pci_bus_num(bus),
> - spapr_phb_vfio_eeh_clear_dev_msix, NULL);
> + pci_for_each_device_under_bus(bus, spapr_phb_vfio_eeh_clear_dev_msix,
> + NULL);
> }
>
> static void spapr_phb_vfio_eeh_pre_reset(SpaprPhbState *sphb)
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 6fafffb029..1b51a72838 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -1163,8 +1163,7 @@ static void s390_pci_enumerate_bridge(PCIBus *bus, PCIDevice *pdev,
> }
>
> /* Assign numbers to all child bridges. The last is the highest number. */
> - pci_for_each_device(sec_bus, pci_bus_num(sec_bus),
> - s390_pci_enumerate_bridge, s);
> + pci_for_each_device_under_bus(sec_bus, s390_pci_enumerate_bridge, s);
> pci_default_write_config(pdev, PCI_SUBORDINATE_BUS, s->bus_no, 1);
> }
>
> @@ -1193,7 +1192,7 @@ static void s390_pcihost_reset(DeviceState *dev)
> * on every system reset, we also have to reassign numbers.
> */
> s->bus_no = 0;
> - pci_for_each_device(bus, pci_bus_num(bus), s390_pci_enumerate_bridge, s);
> + pci_for_each_device_under_bus(bus, s390_pci_enumerate_bridge, s);
> }
>
> static void s390_pcihost_class_init(ObjectClass *klass, void *data)
> diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
> index ca0a98187e..027190fa44 100644
> --- a/hw/xen/xen_pt.c
> +++ b/hw/xen/xen_pt.c
> @@ -615,8 +615,8 @@ static void xen_pt_region_update(XenPCIPassthroughState *s,
> }
>
> args.type = d->io_regions[bar].type;
> - pci_for_each_device(pci_get_bus(d), pci_dev_bus_num(d),
> - xen_pt_check_bar_overlap, &args);
> + pci_for_each_device_under_bus(pci_get_bus(d),
> + xen_pt_check_bar_overlap, &args);
> if (args.rc) {
> XEN_PT_WARN(d, "Region: %d (addr: 0x%"FMT_PCIBUS
> ", len: 0x%"FMT_PCIBUS") is overlapped.\n",
> diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
> index 4a8740b76b..5c4016b995 100644
> --- a/include/hw/pci/pci.h
> +++ b/include/hw/pci/pci.h
> @@ -467,6 +467,11 @@ void pci_for_each_device(PCIBus *bus, int bus_num,
> void pci_for_each_device_reverse(PCIBus *bus, int bus_num,
> pci_bus_dev_fn fn,
> void *opaque);
> +void pci_for_each_device_under_bus(PCIBus *bus,
> + pci_bus_dev_fn fn, void *opaque);
> +void pci_for_each_device_under_bus_reverse(PCIBus *bus,
> + pci_bus_dev_fn fn,
> + void *opaque);
> void pci_for_each_bus_depth_first(PCIBus *bus, pci_bus_ret_fn begin,
> pci_bus_fn end, void *parent_state);
> PCIDevice *pci_get_function_0(PCIDevice *pci_dev);
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2021-10-29 7:47 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-28 4:31 [PATCH v2 0/5] pci/iommu: Fail early if vfio-pci detected before vIOMMU Peter Xu
2021-10-28 4:31 ` [PATCH v2 1/5] pci: Define pci_bus_dev_fn/pci_bus_fn/pci_bus_ret_fn Peter Xu
2021-10-28 4:31 ` [PATCH v2 2/5] pci: Export pci_for_each_device_under_bus*() Peter Xu
2021-10-29 0:06 ` David Gibson [this message]
2021-10-28 4:31 ` [PATCH v2 3/5] qom: object_child_foreach_recursive_type() Peter Xu
2021-10-28 7:06 ` David Hildenbrand
2021-10-28 4:31 ` [PATCH v2 4/5] pci: Add pci_for_each_root_bus() Peter Xu
2021-10-28 7:09 ` David Hildenbrand
2021-10-28 4:31 ` [PATCH v2 5/5] pc/q35: Add pre-plug hook for x86-iommu Peter Xu
2021-10-28 7:17 ` David Hildenbrand
2021-10-28 8:16 ` Peter Xu
2021-10-28 14:52 ` Alex Williamson
2021-10-28 15:36 ` Peter Xu
2021-10-28 16:11 ` Alex Williamson
2021-10-29 2:53 ` Peter Xu
2021-10-29 15:31 ` Alex Williamson
2021-11-02 1:15 ` [PATCH v2 0/5] pci/iommu: Fail early if vfio-pci detected before vIOMMU Peter Xu
2021-11-02 6:40 ` Michael S. Tsirkin
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=YXs68hRtHz1c5L/M@yekko \
--to=david@gibson.dropbear.id.au \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=david@redhat.com \
--cc=ehabkost@redhat.com \
--cc=eric.auger@redhat.com \
--cc=imammedo@redhat.com \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.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 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.