>-----Original Message----- >From: Jim Shu <jim....@sifive.com> >Subject: Re: [PATCH v4 02/20] hw/pci: Introduce >pci_device_get_viommu_cap() > >Hi Zhenzhong, > >On Tue, Jul 29, 2025 at 5:21 PM Zhenzhong Duan ><zhenzhong.d...@intel.com> wrote: >> >> Introduce a new PCIIOMMUOps optional callback, get_viommu_cap() which >> allows to retrieve capabilities exposed by a vIOMMU. The first planned >> capability is VIOMMU_CAP_HW_NESTED that advertises the support of HW >> nested stage translation scheme. pci_device_get_viommu_cap is a wrapper >> that can be called on a PCI device potentially protected by a vIOMMU. >> >> get_viommu_cap() is designed to return 64bit bitmap of purely emulated >> capabilities which are only derermined by user's configuration, no host >> capabilities involved. Reasons are: >> >> 1. there can be more than one host IOMMUs with different capabilities >> 2. there can also be more than one vIOMMUs with different user >> configuration, e.g., arm smmuv3. >> 3. This is migration friendly, return value is consistent between source >> and target. >> 4. It's too late for VFIO to call get_viommu_cap() after set_iommu_device() >> because we need get_viommu_cap() to determine if creating nested >parent >> hwpt or not at attaching stage, meanwhile hiod realize needs iommufd, >> devid and hwpt_id which are ready after attach_device(). >> See below sequence: >> >> attach_device() >> get_viommu_cap() >> create hwpt >> ... >> create hiod >> 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 | 17 +++++++++++++++++ >> include/hw/pci/pci.h | 25 +++++++++++++++++++++++++ >> hw/pci/pci.c | 11 +++++++++++ >> 4 files changed, 54 insertions(+) >> create mode 100644 include/hw/iommu.h >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index 37879ab64e..840cb1e604 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -2304,6 +2304,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..021db50db5 >> --- /dev/null >> +++ b/include/hw/iommu.h >> @@ -0,0 +1,17 @@ >> +/* >> + * General vIOMMU capabilities, flags, etc >> + * >> + * Copyright (C) 2025 Intel Corporation. >> + * >> + * SPDX-License-Identifier: GPL-2.0-or-later >> + */ >> + >> +#ifndef HW_IOMMU_H >> +#define HW_IOMMU_H >> + > >Could we include header "qemu/bitops.h" here to use `BIT_ULL()` in this file? >Or it will get compile error when including it in the other IOMMU.
Oh, thanks for point out, fixed at https://github.com/yiliu1765/qemu/commits/zhenzhong/iommufd_nesting.v5.wip/ BRs, Zhenzhong