From: Eric Auger <eric.auger@redhat.com>
To: Zhenzhong Duan <zhenzhong.duan@intel.com>, qemu-devel@nongnu.org
Cc: alex.williamson@redhat.com, clg@redhat.com, mst@redhat.com,
jasowang@redhat.com, peterx@redhat.com, ddutile@redhat.com,
jgg@nvidia.com, nicolinc@nvidia.com, joao.m.martins@oracle.com,
clement.mathieu--drif@eviden.com, kevin.tian@intel.com,
yi.l.liu@intel.com, chao.p.peng@intel.com
Subject: Re: [PATCH v5 04/21] vfio: Introduce helper vfio_pci_from_vfio_device()
Date: Wed, 27 Aug 2025 13:34:35 +0200 [thread overview]
Message-ID: <809029fc-c9d8-459c-8477-f7931d11623c@redhat.com> (raw)
In-Reply-To: <20250822064101.123526-5-zhenzhong.duan@intel.com>
On 8/22/25 8:40 AM, Zhenzhong Duan wrote:
> Introduce helper vfio_pci_from_vfio_device() to transform from VFIODevice
> to VFIOPCIDevice, also to hide low level VFIO_DEVICE_TYPE_PCI type check.
>
> Suggested-by: Cédric Le Goater <clg@redhat.com>
> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
> Reviewed-by: Cédric Le Goater <clg@redhat.com>
> Link: https://lore.kernel.org/qemu-devel/20250801023533.1458644-1-zhenzhong.duan@intel.com
> [ clg: Added documentation ]
> Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Eric
> ---
> hw/vfio/pci.h | 12 ++++++++++++
> hw/vfio/container.c | 4 ++--
> hw/vfio/device.c | 2 +-
> hw/vfio/iommufd.c | 4 ++--
> hw/vfio/listener.c | 4 ++--
> hw/vfio/pci.c | 9 +++++++++
> 6 files changed, 28 insertions(+), 7 deletions(-)
>
> diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
> index 810a842f4a..beb8fb9ee7 100644
> --- a/hw/vfio/pci.h
> +++ b/hw/vfio/pci.h
> @@ -221,6 +221,18 @@ void vfio_pci_write_config(PCIDevice *pdev,
> uint64_t vfio_vga_read(void *opaque, hwaddr addr, unsigned size);
> void vfio_vga_write(void *opaque, hwaddr addr, uint64_t data, unsigned size);
>
> +/**
> + * vfio_pci_from_vfio_device: Transform from VFIODevice to
> + * VFIOPCIDevice
> + *
> + * This function checks if the given @vbasedev is a VFIO PCI device.
> + * If it is, it returns the containing VFIOPCIDevice.
> + *
> + * @vbasedev: The VFIODevice to transform
> + *
> + * Return: The VFIOPCIDevice on success, NULL on failure.
> + */
> +VFIOPCIDevice *vfio_pci_from_vfio_device(VFIODevice *vbasedev);
> void vfio_sub_page_bar_update_mappings(VFIOPCIDevice *vdev);
> bool vfio_opt_rom_in_denylist(VFIOPCIDevice *vdev);
> bool vfio_config_quirk_setup(VFIOPCIDevice *vdev, Error **errp);
> diff --git a/hw/vfio/container.c b/hw/vfio/container.c
> index 3e13feaa74..134ddccc52 100644
> --- a/hw/vfio/container.c
> +++ b/hw/vfio/container.c
> @@ -1087,7 +1087,7 @@ static int vfio_legacy_pci_hot_reset(VFIODevice *vbasedev, bool single)
> /* Prep dependent devices for reset and clear our marker. */
> QLIST_FOREACH(vbasedev_iter, &group->device_list, next) {
> if (!vbasedev_iter->dev->realized ||
> - vbasedev_iter->type != VFIO_DEVICE_TYPE_PCI) {
> + !vfio_pci_from_vfio_device(vbasedev_iter)) {
> continue;
> }
> tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev);
> @@ -1172,7 +1172,7 @@ out:
>
> QLIST_FOREACH(vbasedev_iter, &group->device_list, next) {
> if (!vbasedev_iter->dev->realized ||
> - vbasedev_iter->type != VFIO_DEVICE_TYPE_PCI) {
> + !vfio_pci_from_vfio_device(vbasedev_iter)) {
> continue;
> }
> tmp = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev);
> diff --git a/hw/vfio/device.c b/hw/vfio/device.c
> index 52a1996dc4..08f12ac31f 100644
> --- a/hw/vfio/device.c
> +++ b/hw/vfio/device.c
> @@ -129,7 +129,7 @@ static inline const char *action_to_str(int action)
>
> static const char *index_to_str(VFIODevice *vbasedev, int index)
> {
> - if (vbasedev->type != VFIO_DEVICE_TYPE_PCI) {
> + if (!vfio_pci_from_vfio_device(vbasedev)) {
> return NULL;
> }
>
> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
> index 48c590b6a9..8c27222f75 100644
> --- a/hw/vfio/iommufd.c
> +++ b/hw/vfio/iommufd.c
> @@ -737,8 +737,8 @@ iommufd_cdev_dep_get_realized_vpdev(struct vfio_pci_dependent_device *dep_dev,
> }
>
> vbasedev_tmp = iommufd_cdev_pci_find_by_devid(dep_dev->devid);
> - if (!vbasedev_tmp || !vbasedev_tmp->dev->realized ||
> - vbasedev_tmp->type != VFIO_DEVICE_TYPE_PCI) {
> + if (!vfio_pci_from_vfio_device(vbasedev_tmp) ||
> + !vbasedev_tmp->dev->realized) {
> return NULL;
> }
>
> diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c
> index f498e23a93..903dfd8bf2 100644
> --- a/hw/vfio/listener.c
> +++ b/hw/vfio/listener.c
> @@ -450,7 +450,7 @@ static void vfio_device_error_append(VFIODevice *vbasedev, Error **errp)
> * MMIO region mapping failures are not fatal but in this case PCI
> * peer-to-peer transactions are broken.
> */
> - if (vbasedev && vbasedev->type == VFIO_DEVICE_TYPE_PCI) {
> + if (vfio_pci_from_vfio_device(vbasedev)) {
> error_append_hint(errp, "%s: PCI peer-to-peer transactions "
> "on BARs are not supported.\n", vbasedev->name);
> }
> @@ -751,7 +751,7 @@ static bool vfio_section_is_vfio_pci(MemoryRegionSection *section,
> owner = memory_region_owner(section->mr);
>
> QLIST_FOREACH(vbasedev, &bcontainer->device_list, container_next) {
> - if (vbasedev->type != VFIO_DEVICE_TYPE_PCI) {
> + if (!vfio_pci_from_vfio_device(vbasedev)) {
> continue;
> }
> pcidev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 07257d0fa0..3fe5b03eb1 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -2833,6 +2833,15 @@ static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f)
> return ret;
> }
>
> +/* Transform from VFIODevice to VFIOPCIDevice. Return NULL if fails. */
> +VFIOPCIDevice *vfio_pci_from_vfio_device(VFIODevice *vbasedev)
> +{
> + if (vbasedev && vbasedev->type == VFIO_DEVICE_TYPE_PCI) {
> + return container_of(vbasedev, VFIOPCIDevice, vbasedev);
> + }
> + return NULL;
> +}
> +
> void vfio_sub_page_bar_update_mappings(VFIOPCIDevice *vdev)
> {
> PCIDevice *pdev = &vdev->pdev;
next prev parent reply other threads:[~2025-08-27 11:35 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-22 6:40 [PATCH v5 00/21] intel_iommu: Enable stage-1 translation for passthrough device Zhenzhong Duan
2025-08-22 6:40 ` [PATCH v5 01/21] intel_iommu: Rename vtd_ce_get_rid2pasid_entry to vtd_ce_get_pasid_entry Zhenzhong Duan
2025-08-22 22:19 ` Nicolin Chen via
2025-08-25 6:01 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 02/21] hw/pci: Introduce pci_device_get_viommu_cap() Zhenzhong Duan
2025-08-22 22:22 ` Nicolin Chen
2025-08-27 11:13 ` Yi Liu
2025-08-27 11:22 ` Eric Auger
2025-08-27 12:30 ` Yi Liu
2025-08-27 12:32 ` Eric Auger
2025-08-27 15:30 ` Nicolin Chen
2025-08-28 8:26 ` Yi Liu
2025-08-28 9:06 ` Duan, Zhenzhong
2025-08-29 1:54 ` Duan, Zhenzhong
2025-08-29 3:26 ` Nicolin Chen
2025-09-01 2:35 ` Duan, Zhenzhong
2025-09-01 2:59 ` Nicolin Chen
2025-09-01 3:31 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 03/21] intel_iommu: Implement get_viommu_cap() callback Zhenzhong Duan
2025-08-22 22:23 ` Nicolin Chen
2025-08-22 6:40 ` [PATCH v5 04/21] vfio: Introduce helper vfio_pci_from_vfio_device() Zhenzhong Duan
2025-08-22 22:40 ` Nicolin Chen via
2025-08-25 6:06 ` Duan, Zhenzhong
2025-08-27 11:13 ` Yi Liu
2025-08-27 11:34 ` Eric Auger [this message]
2025-09-01 16:36 ` Cédric Le Goater
2025-09-02 2:12 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 05/21] vfio/iommufd: Force creating nested parent domain Zhenzhong Duan
2025-08-22 23:12 ` Nicolin Chen
2025-08-25 8:28 ` Duan, Zhenzhong
2025-08-27 11:51 ` Eric Auger
2025-08-27 11:48 ` Eric Auger
2025-08-28 9:53 ` Duan, Zhenzhong
2025-08-28 13:00 ` Eric Auger
2025-08-29 1:40 ` Duan, Zhenzhong
2025-08-29 3:47 ` Nicolin Chen
2025-08-22 6:40 ` [PATCH v5 06/21] hw/pci: Export pci_device_get_iommu_bus_devfn() and return bool Zhenzhong Duan
2025-08-22 23:13 ` Nicolin Chen
2025-08-27 11:14 ` Yi Liu
2025-08-22 6:40 ` [PATCH v5 07/21] intel_iommu: Introduce a new structure VTDHostIOMMUDevice Zhenzhong Duan
2025-08-22 23:17 ` Nicolin Chen
2025-08-26 17:21 ` Nicolin Chen
2025-08-27 6:45 ` Duan, Zhenzhong
2025-08-27 8:51 ` Nicolin Chen
2025-08-27 16:36 ` Eric Auger
2025-08-27 16:57 ` Nicolin Chen
2025-08-27 11:14 ` Yi Liu
2025-08-28 9:17 ` Duan, Zhenzhong
2025-08-29 2:57 ` Yi Liu
2025-08-22 6:40 ` [PATCH v5 08/21] intel_iommu: Check for compatibility with IOMMUFD backed device when x-flts=on Zhenzhong Duan
2025-08-27 11:42 ` Yi Liu
2025-08-28 9:37 ` Duan, Zhenzhong
2025-08-27 11:55 ` Eric Auger
2025-08-22 6:40 ` [PATCH v5 09/21] intel_iommu: Fail passthrough device under PCI bridge if x-flts=on Zhenzhong Duan
2025-08-28 10:33 ` Yi Liu
2025-09-01 5:14 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 10/21] intel_iommu: Introduce two helpers vtd_as_from/to_iommu_pasid_locked Zhenzhong Duan
2025-08-28 11:36 ` Yi Liu
2025-09-01 5:33 ` Duan, Zhenzhong
2025-09-03 6:30 ` Yi Liu
2025-09-03 7:13 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 11/21] intel_iommu: Handle PASID entry removal and update Zhenzhong Duan
2025-08-27 14:25 ` Eric Auger
2025-09-01 3:17 ` Duan, Zhenzhong
2025-08-28 12:05 ` Yi Liu
2025-09-01 3:31 ` Duan, Zhenzhong
2025-09-03 7:58 ` Yi Liu
2025-09-04 2:37 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 12/21] intel_iommu: Handle PASID entry addition Zhenzhong Duan
2025-08-27 16:22 ` Eric Auger
2025-09-01 9:03 ` Duan, Zhenzhong
2025-09-03 8:52 ` Yi Liu
2025-09-04 2:45 ` Duan, Zhenzhong
2025-08-29 5:46 ` Yi Liu
2025-08-22 6:40 ` [PATCH v5 13/21] intel_iommu: Introduce a new pasid cache invalidation type FORCE_RESET Zhenzhong Duan
2025-08-27 16:28 ` Eric Auger
2025-08-29 5:56 ` Yi Liu
2025-09-01 9:04 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 14/21] intel_iommu: Stick to system MR for IOMMUFD backed host device when x-fls=on Zhenzhong Duan
2025-08-27 17:14 ` Eric Auger
2025-08-29 6:06 ` Yi Liu
2025-08-22 6:40 ` [PATCH v5 15/21] intel_iommu: Bind/unbind guest page table to host Zhenzhong Duan
2025-08-28 8:37 ` Eric Auger
2025-08-29 7:05 ` Yi Liu
2025-08-22 6:40 ` [PATCH v5 16/21] intel_iommu: Replay pasid bindings after context cache invalidation Zhenzhong Duan
2025-08-28 9:43 ` Eric Auger
2025-08-29 7:35 ` Yi Liu
2025-09-01 8:11 ` Duan, Zhenzhong
2025-09-03 10:18 ` Yi Liu
2025-09-04 6:42 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 17/21] intel_iommu: Propagate PASID-based iotlb invalidation to host Zhenzhong Duan
2025-08-28 10:00 ` Eric Auger
2025-08-28 12:11 ` Yi Liu
2025-09-01 8:32 ` Duan, Zhenzhong
2025-08-22 6:40 ` [PATCH v5 18/21] intel_iommu: Replay all pasid bindings when either SRTP or TE bit is changed Zhenzhong Duan
2025-08-28 10:02 ` Eric Auger
2025-08-22 6:40 ` [PATCH v5 19/21] vfio: Add a new element bypass_ro in VFIOContainerBase Zhenzhong Duan
2025-08-28 12:47 ` Eric Auger
2025-08-22 6:40 ` [PATCH v5 20/21] Workaround for ERRATA_772415_SPR17 Zhenzhong Duan
2025-08-22 23:55 ` Nicolin Chen
2025-08-25 9:21 ` Duan, Zhenzhong
2025-08-25 16:58 ` Nicolin Chen
2025-08-27 7:11 ` Duan, Zhenzhong
2025-08-27 8:42 ` Nicolin Chen
2025-08-27 11:56 ` Yi Liu
2025-08-27 15:09 ` Nicolin Chen
2025-08-29 8:16 ` Yi Liu
2025-08-29 8:54 ` Nicolin Chen
2025-08-22 6:40 ` [PATCH v5 21/21] intel_iommu: Enable host device when x-flts=on in scalable mode Zhenzhong Duan
2025-08-28 12:51 ` Eric Auger
2025-08-29 7:42 ` Yi Liu
2025-08-27 11:13 ` [PATCH v5 00/21] intel_iommu: Enable stage-1 translation for passthrough device Yi Liu
2025-08-28 5:53 ` Duan, Zhenzhong
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=809029fc-c9d8-459c-8477-f7931d11623c@redhat.com \
--to=eric.auger@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@intel.com \
--cc=clement.mathieu--drif@eviden.com \
--cc=clg@redhat.com \
--cc=ddutile@redhat.com \
--cc=jasowang@redhat.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.com \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=nicolinc@nvidia.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@intel.com \
--cc=zhenzhong.duan@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 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).