On Fri, Jun 7, 2024 at 11:46 PM Edgecombe, Rick P <rick.p.edgecombe@xxxxxxxxx> wrote: > > Also, please rename the last argument to pfn_for_gfn. I'm not proud of > > it, but it took me over 10 minutes to understand if the pfn referred > > to the gfn itself, or to the external SP that holds the spte... > > There's a possibility that it isn't just me. :) > > Ah, I see how that could be confusing. > > > (In general, this patch took me a _lot_ to review... there were a > > couple of places that left me incomprehensibly puzzled, more on this > > below). > > Sorry for that. Thanks for taking the time to weed through it anyway. Oh, don't worry, I have no idea what made this patch stick out as the hardest one... Maybe it's really that there is such a thing as too many comments in some cases, and also the mutual recursion between handle_removed_pt() and handle_changed_spte(). Nothing that can't be fixed. > > > + kvm_pfn_t old_pfn = spte_to_pfn(old_spte); > > > + int ret; > > > + > > > + /* > > > + * Allow only leaf page to be zapped. Reclaim non-leaf page tables > > > page > > > > This comment left me confused, so I'll try to rephrase and see if I > > can explain what happens. Correct me if I'm wrong. > > > > The only paths to handle_removed_pt() are: > > - kvm_tdp_mmu_zap_leafs() > > - kvm_tdp_mmu_zap_invalidated_roots() > > > > but because kvm_mmu_zap_all_fast() does not operate on mirror roots, > > the latter can only happen at VM destruction time. > > > > But it's not clear why it's worth mentioning it here, or even why it > > is special at all. Isn't that just what handle_removed_pt() does at > > the end? Why does it matter that it's only done at VM destruction > > time? > > > > In other words, it seems to me that this comment is TMI. And if I am > > wrong (which may well be), the extra information should explain the > > "why" in more detail, and it should be around the call to > > reflect_free_spt, not here. > > TDX of course has the limitation around the ordering of the zapping S-EPT. So I > read the comment to be referring to how the implementation avoids zapping any > non-leaf PTEs during TD runtime. Ok, I think then you can just replace it with a comment that explains why TDX needs it, as it's one of those places where we let TDX assumptions creep into common code - which is not a big deal per se, it's just worth mentioning it in a comment. Unlike the tdp_mmu_get_root_for_fault() remark I have just sent for patch 9/15, here the assumption is more algorithmic and less about a specific line of code, and I think that makes it okay. Paolo > > > - /* Don't support setting for the non-atomic case */ > > > - if (is_mirror_sptep(sptep)) > > > + if (is_mirror_sptep(sptep)) { > > > + /* Only support zapping for the non-atomic case */ > > > > Like for patch 10, this comment should point out why we never get here > > for mirror SPs. > > Ok.