> From: Jan Beulich
> Sent: Tuesday, November 23, 2021 9:40 PM
>
> As of commit 6773b1a7584a ("VT-d: Don't assume register-based
> invalidation is always supported") we don't (try to) use register based
> invalidation anymore when that's not supported by hardware. Hence
> there's also no point in the respective check, avoiding pointless IOMMU
> initialization failure. After all the spec (version 3.3 at the time of
> writing) doesn't say what the respective Extended Capability Register
> field would contain in such a case.
>
> Signed-off-by: Jan Beulich
Reviewed-by: Kevin Tian
>
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1228,7 +1228,8 @@ int __init iommu_alloc(struct acpi_drhd_
>
> if ( cap_fault_reg_offset(iommu->cap) +
> cap_num_fault_regs(iommu->cap) * PRIMARY_FAULT_REG_LEN >
> PAGE_SIZE ||
> - ecap_iotlb_offset(iommu->ecap) >= PAGE_SIZE )
> + (has_register_based_invalidation(iommu) &&
> + ecap_iotlb_offset(iommu->ecap) >= PAGE_SIZE) )
> {
> printk(XENLOG_ERR VTDPREFIX "IOMMU: unsupported\n");
> print_iommu_regs(drhd);