On Tue, May 28, 2024 at 09:48:45PM +0000, "Edgecombe, Rick P" <rick.p.edgecombe@xxxxxxxxx> wrote: > On Fri, 2024-05-24 at 01:20 -0700, Isaku Yamahata wrote: > > > > > > I don't see why these (zap_private_spte and remove_private_spte) can't be a > > > single op. Was it to prepare for huge pages support or something? In the > > > base > > > series they are both only called once. > > > > That is for large page support. The step to merge or split large page is > > 1. zap_private_spte() > > 2. tlb shoot down > > 3. merge/split_private_spte() > > I think we can simplify it for now. Otherwise we can't justify it without > getting into the huge page support. Ok. Now we don't care large page support, we can combine those hooks into single hook. > Looking at how to create some more explainable code here, I'm also wondering > about the tdx_track() call in tdx_sept_remove_private_spte(). I didn't realize > it will send IPIs to each vcpu for *each* page getting zapped. Another one in > the "to optimize later" bucket I guess. And I guess it won't happen very often. We need it. Without tracking (or TLB shoot down), we'll hit TDX_TLB_TRACKING_NOT_DONE. The TDX module has to guarantee that there is no remaining TLB entries for pages freed by TDH.MEM.PAGE.REMOVE(). -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>