On 2024/8/5 14:27, Zhenzhong Duan wrote:
> When guest configures Nested Translation(011b) or First-stage Translation only
> (001b), type check passed unaccurately.
>
> Fails the type check in those cases as their simulation isn't supported yet.
>
> Fixes: fb43cf739e1 ("intel_iommu: scalable mode emulation")
> Suggested-by: Yi Liu <yi.l.liu@intel.com>
> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
> Reviewed-by: Clément Mathieu--Drif<clement.mathieu--drif@eviden.com>
> ---
> hw/i386/intel_iommu.c | 12 ++++--------
> 1 file changed, 4 insertions(+), 8 deletions(-)
Reviewed-by: Yi Liu <yi.l.liu@intel.com>
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index c52912f593..e3465fc27d 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -759,20 +759,16 @@ static inline bool vtd_pe_type_check(X86IOMMUState *x86_iommu,
> VTDPASIDEntry *pe)
> {
> switch (VTD_PE_GET_TYPE(pe)) {
> - case VTD_SM_PASID_ENTRY_FLT:
> case VTD_SM_PASID_ENTRY_SLT:
> - case VTD_SM_PASID_ENTRY_NESTED:
> - break;
> + return true;
> case VTD_SM_PASID_ENTRY_PT:
> - if (!x86_iommu->pt_supported) {
> - return false;
> - }
> - break;
> + return x86_iommu->pt_supported;
> + case VTD_SM_PASID_ENTRY_FLT:
> + case VTD_SM_PASID_ENTRY_NESTED:
> default:
> /* Unknown type */
> return false;
> }
> - return true;
> }
>
> static inline bool vtd_pdire_present(VTDPASIDDirEntry *pdire)
--
Regards,
Yi Liu