>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH rfcv2 08/20] iommufd: Implement query of >HOST_IOMMU_DEVICE_CAP_ERRATA > > > > >On 2/19/25 9:22 AM, Zhenzhong Duan wrote: >> Implement query of HOST_IOMMU_DEVICE_CAP_ERRATA for IOMMUFD >> backed host IOMMU device. >> >> Query on this capability is not supported for legacy backend >> because there is no plan to support nesting with leacy backend >legacy >> backed host device. >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> include/system/host_iommu_device.h | 2 ++ >> backends/iommufd.c | 2 ++ >> hw/vfio/iommufd.c | 1 + >> 3 files changed, 5 insertions(+) >> >> diff --git a/include/system/host_iommu_device.h >b/include/system/host_iommu_device.h >> index 18f8b5e5cf..250600fc1d 100644 >> --- a/include/system/host_iommu_device.h >> +++ b/include/system/host_iommu_device.h >> @@ -32,6 +32,7 @@ typedef struct HostIOMMUDeviceCaps { >> uint64_t hw_caps; >> bool nesting; >> bool fs1gp; >> + uint32_t errata; >to be consistent with the others yu may have introduced this alongside >with the 2 others? >This is also not usable by other IOMMUs. Yes, this is vendor specific element. Will merge after confirm nesting and fs1gp are vendor specific too. Thanks Zhenzhong > >Eric >> } HostIOMMUDeviceCaps; >> >> #define TYPE_HOST_IOMMU_DEVICE "host-iommu-device" >> @@ -130,6 +131,7 @@ struct HostIOMMUDeviceClass { >> #define HOST_IOMMU_DEVICE_CAP_AW_BITS 1 >> #define HOST_IOMMU_DEVICE_CAP_NESTING 2 >> #define HOST_IOMMU_DEVICE_CAP_FS1GP 3 >> +#define HOST_IOMMU_DEVICE_CAP_ERRATA 4 >> >> #define HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX 64 >> #endif >> diff --git a/backends/iommufd.c b/backends/iommufd.c >> index 0a1a40cbba..3c23caef96 100644 >> --- a/backends/iommufd.c >> +++ b/backends/iommufd.c >> @@ -374,6 +374,8 @@ static int hiod_iommufd_get_cap(HostIOMMUDevice >*hiod, int cap, Error **errp) >> return caps->nesting; >> case HOST_IOMMU_DEVICE_CAP_FS1GP: >> return caps->fs1gp; >> + case HOST_IOMMU_DEVICE_CAP_ERRATA: >> + return caps->errata; >> default: >> error_setg(errp, "%s: unsupported capability %x", hiod->name, cap); >> return -EINVAL; >> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c >> index df6a12d200..58bff030e1 100644 >> --- a/hw/vfio/iommufd.c >> +++ b/hw/vfio/iommufd.c >> @@ -848,6 +848,7 @@ static bool >hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque, >> case IOMMU_HW_INFO_TYPE_INTEL_VTD: >> caps->nesting = !!(data.vtd.ecap_reg & VTD_ECAP_NEST); >> caps->fs1gp = !!(data.vtd.cap_reg & VTD_CAP_FS1GP); >> + caps->errata = data.vtd.flags & >IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17; >> break; >> case IOMMU_HW_INFO_TYPE_ARM_SMMUV3: >> case IOMMU_HW_INFO_TYPE_NONE: