Hi Eric, >-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH v1 02/15] intel_iommu: Optimize context entry cache >utilization > >Hi Zhenzhong, > >On 6/6/25 12:04 PM, Zhenzhong Duan wrote: >> There are many call sites referencing context entry by calling >> vtd_dev_to_context_entry() which will traverse the DMAR table. >> >> In most cases we can use cached context entry in vtd_as->context_cache_entry >> except when its entry is stale. Currently only global and domain context >> invalidation stale it. >> >> So introduce a helper function vtd_as_to_context_entry() to fetch from cache >> before trying with vtd_dev_to_context_entry(). >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> hw/i386/intel_iommu.c | 36 +++++++++++++++++++++++------------- >> 1 file changed, 23 insertions(+), 13 deletions(-) >> >> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c >> index f0b1f90eff..a2f3250724 100644 >> --- a/hw/i386/intel_iommu.c >> +++ b/hw/i386/intel_iommu.c >> @@ -1597,6 +1597,22 @@ static int >vtd_dev_to_context_entry(IntelIOMMUState *s, uint8_t bus_num, >> return 0; >> } >> >> +static int vtd_as_to_context_entry(VTDAddressSpace *vtd_as, >VTDContextEntry *ce) >> +{ >> + IntelIOMMUState *s = vtd_as->iommu_state; >> + uint8_t bus_num = pci_bus_num(vtd_as->bus); >> + uint8_t devfn = vtd_as->devfn; >> + VTDContextCacheEntry *cc_entry = &vtd_as->context_cache_entry; >> + >> + /* Try to fetch context-entry from cache first */ >> + if (cc_entry->context_cache_gen == s->context_cache_gen) { >> + *ce = cc_entry->context_entry; >> + return 0; >> + } else { >> + return vtd_dev_to_context_entry(s, bus_num, devfn, ce); >> + } >> +} >> + >While the patch looks good to me can't you use the helper also in >vtd_do_iommu_translate()? >See " /* Try to fetch context-entry from cache first */"
It can, but it finally calls into vtd_dev_to_context_entry() so we can call vtd_dev_to_context_entry() directly. I will drop this patch following Yi's suggestion. Thanks Zhenzhong