Message ID | 20240805062727.2307552-3-zhenzhong.duan@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | intel_iommu: Enable stage-1 translation for emulated device | expand |
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)
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)