Supported guest address witdh (SGAW) only indicates what the iommu's capabilities are wrt page table levels for second level page-tables. IOMMU should pick the right level depending on the Maximum Guest Address Width (MGAW).
For pass-through translation type, address width must be programmed with the largest AGAW supported by the HW. Reported-by: Ramos Falcon, Ernesto R <[email protected]> Signed-off-by: Ashok Raj <[email protected]> Signed-off-by: Jacob Pan <[email protected]> --- drivers/iommu/intel-iommu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 140d6ab..f16db3b 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -719,7 +719,11 @@ int iommu_calculate_max_sagaw(struct intel_iommu *iommu) */ int iommu_calculate_agaw(struct intel_iommu *iommu) { - return __iommu_calculate_agaw(iommu, DEFAULT_DOMAIN_ADDRESS_WIDTH); + unsigned long mgaw; + + /* Respect Max Guest Address Width */ + mgaw = min(cap_mgaw(iommu->cap), DEFAULT_DOMAIN_ADDRESS_WIDTH); + return __iommu_calculate_agaw(iommu, mgaw); } /* This functionin only returns single iommu in a domain */ -- 2.7.4 _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
