>-----Original Message----- >From: Liu, Yi L <yi.l....@intel.com> >Subject: Re: [PATCH v6 05/22] hw/pci: Introduce >pci_device_get_viommu_flags() > >On 2025/9/18 16:57, Zhenzhong Duan wrote: >> Introduce a new PCIIOMMUOps optional callback, get_viommu_flags() >which >> allows to retrieve flags exposed by a vIOMMU. The first planned vIOMMU >> device flag is VIOMMU_FLAG_WANT_NESTING_PARENT that advertises the >> support of HW nested stage translation scheme and wants other sub-system >> like VFIO's cooperation to create nesting parent HWPT. >> >> pci_device_get_viommu_flags() is a wrapper that can be called on a PCI >> device potentially protected by a vIOMMU. >> >> get_viommu_flags() is designed to return 64bit bitmap of purely vIOMMU >> flags which are only determined by user's configuration, no host >> capabilities involved. Reasons are: >> >> 1. host may has heterogeneous IOMMUs, each with different capabilities >> 2. this is migration friendly, return value is consistent between source >> and target. >> 3. host IOMMU capabilities are passed to vIOMMU through >set_iommu_device() >> interface which have to be after attach_device(), when >get_viommu_flags() >> is called in attach_device(), there is no way for vIOMMU to get host >> IOMMU capabilities yet, so only pure vIOMMU flags can be returned. >> See below sequence: >> >> vfio_device_attach(): >> iommufd_cdev_attach(): >> pci_device_get_viommu_flags() for HW nesting cap >> create a nesting parent HWPT >> attach device to the HWPT >> vfio_device_hiod_create_and_realize() creating hiod >> ... >> pci_device_set_iommu_device(hiod) >> >> Suggested-by: Yi Liu <yi.l....@intel.com> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> MAINTAINERS | 1 + >> include/hw/iommu.h | 19 +++++++++++++++++++ >> include/hw/pci/pci.h | 27 +++++++++++++++++++++++++++ >> hw/pci/pci.c | 11 +++++++++++ >> 4 files changed, 58 insertions(+) >> create mode 100644 include/hw/iommu.h >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index f8cd513d8b..71457e4cde 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -2307,6 +2307,7 @@ F: include/system/iommufd.h >> F: backends/host_iommu_device.c >> F: include/system/host_iommu_device.h >> F: include/qemu/chardev_open.h >> +F: include/hw/iommu.h >> F: util/chardev_open.c >> F: docs/devel/vfio-iommufd.rst >> >> diff --git a/include/hw/iommu.h b/include/hw/iommu.h >> new file mode 100644 >> index 0000000000..65d652950a >> --- /dev/null >> +++ b/include/hw/iommu.h >> @@ -0,0 +1,19 @@ >> +/* >> + * General vIOMMU flags >> + * >> + * Copyright (C) 2025 Intel Corporation. >> + * >> + * SPDX-License-Identifier: GPL-2.0-or-later >> + */ >> + >> +#ifndef HW_IOMMU_H >> +#define HW_IOMMU_H >> + >> +#include "qemu/bitops.h" >> + >> +enum { >> + /* Nesting parent HWPT will be reused by vIOMMU to create nested >HWPT */ > >vIOMMU needs nesting parent HWPT to create nested HWPT
Will do. Thanks Zhenzhong