>-----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

Reply via email to