>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH v2 13/19] intel_iommu: Stick to system MR for >IOMMUFD backed host device when x-fls=on > > > >On 6/20/25 9:18 AM, Zhenzhong Duan wrote: >> When guest in scalable mode and x-flts=on, we stick to system MR for >IOMMUFD >when guest works in scalable mode ? >> backed host device. Then its default hwpt contains GPA->HPA mappings >which is >> used directly if PGTT=PT and used as nested parent if PGTT=FLT. Otherwise >> fallback to original processing. >> >> Suggested-by: Yi Liu <yi.l....@intel.com> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> hw/i386/intel_iommu.c | 24 ++++++++++++++++++++++++ >> 1 file changed, 24 insertions(+) >> >> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c >> index ed71bb8ec7..be01f8885f 100644 >> --- a/hw/i386/intel_iommu.c >> +++ b/hw/i386/intel_iommu.c >> @@ -1779,6 +1779,7 @@ static bool >vtd_dev_pt_enabled(IntelIOMMUState *s, VTDContextEntry *ce, >> */ >> return false; >> } >> + >spurious new line
Will fix. >> return (VTD_PE_GET_TYPE(&pe) == VTD_SM_PASID_ENTRY_PT); >> } >> >> @@ -1790,10 +1791,33 @@ static bool >vtd_as_pt_enabled(VTDAddressSpace *as) >> { >> IntelIOMMUState *s; >> VTDContextEntry ce; >> + struct vtd_as_key key = { >> + .bus = as->bus, >> + .devfn = as->devfn, >> + }; >> >> assert(as); >> >> s = as->iommu_state; >> + >> + /* >> + * When guest in scalable mode and x-flts=on, we stick to system MR >ditto That's strange, I didn't see spurious new line here. >> + * for IOMMUFD backed host device. Then its default hwpt contains >> + * GPA->HPA mappings which is used directly if PGTT=PT and used as >> + * nested parent if PGTT=FLT. Otherwise fallback to original >fall back here and above > >This comment sounds a little bit unrelated to the below implementation >which does not refer to system MR. how does the search for the hiod >relate to that. I would refocus the comment. vtd_as_pt_enabled()'s return value determines which MR to switch to. See vtd_switch_address_space(). How about adding a comment: +/* + * vtd_switch_address_space() calls vtd_as_pt_enabled() to determine which + * MR to switch to. Switch to system MR if return true, iommu MR otherwise. + */ static bool vtd_as_pt_enabled(VTDAddressSpace *as) { With this comment, we know the return value impact MR switch and this patch deal with return value. Thanks Zhenzhong