ept_free_entry() gets called after a flush - if one is necessary in the first place - was already issued. That behavior is similar to NPT, which also doesn't have any further flush in p2m_free_entry(). (Furthermore, the function being recursive, in case of recursiveness way too many flushes would have been issued.)
Signed-off-by: Jan Beulich <jbeul...@suse.com> --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -246,8 +246,7 @@ static void ept_free_entry(struct p2m_do ept_free_entry(p2m, epte + i, level - 1); unmap_domain_page(epte); } - - p2m_tlb_flush_sync(p2m); + p2m_free_ptp(p2m, mfn_to_page(_mfn(ept_entry->mfn))); }