[PATCH v3 09/15] KVM: arm64: Free removed stage-2 tables in RCU callback
Oliver Upton
oliver.upton at linux.dev
Tue Nov 1 13:46:14 PDT 2022
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
More information about the linux-arm-kernel
mailing list