On Tue, Nov 01, 2022 at 08:28:04PM +0000, Sean Christopherson wrote: > On Thu, Oct 27, 2022, Oliver Upton wrote: > > There is no real urgency to free a stage-2 subtree that was pruned. > > Nonetheless, KVM does the tear down in the stage-2 fault path while > > holding the MMU lock. > > [ copy ] > This is _very_ misleading. The above paints RCU as an optimization of sorts to > avoid doing work while holding mmu_lock. Freeing page tables in an RCU callback > is _required_ for correctness when allowing parallel page faults to remove page > tables, as holding mmu_lock for read in that case doesn't ensure no other CPU is > accessing and/or holds a reference to the to-be-freed page table. Agree, but it is still important to reason about what is changing here too. Moving work out of the vCPU fault path _is_ valuable, though ancillary to the correctness requirements. > IMO, this patch should to be squashed with the previous patch, "Protect stage-2 > traversal with RCU". One doesn't make any sense without the other. I had split these up back when this series was a lot more gnarly and there was too much slop in a single diff. That isn't the case any more, so yeah I'll squash them. [ paste ] > > Free removed stage-2 subtrees after an RCU grace period. To guarantee > > all stage-2 table pages are freed before killing a VM, add an > > rcu_barrier() to the flush path. An aside, this is flat-out wrong now. -- Thanks, Oliver