Hi David, On Wed, Sep 07, 2022 at 02:32:29PM -0700, David Matlack wrote: > On Tue, Aug 30, 2022 at 07:41:24PM +0000, Oliver Upton wrote: > > The map walkers install new page tables during their traversal. Return > > the newly-installed table PTE from the map callbacks to point the walker > > at the new table w/o rereading the ptep. > > > > Signed-off-by: Oliver Upton <oliver.upton@xxxxxxxxx> > > --- > > arch/arm64/kvm/hyp/pgtable.c | 9 +++++---- > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c > > index 331f6e3b2c20..f911509e6512 100644 > > --- a/arch/arm64/kvm/hyp/pgtable.c > > +++ b/arch/arm64/kvm/hyp/pgtable.c > > @@ -202,13 +202,12 @@ static inline int __kvm_pgtable_visit(struct kvm_pgtable_walk_data *data, > > if (!table && (flags & KVM_PGTABLE_WALK_LEAF)) { > > ret = kvm_pgtable_visitor_cb(data, addr, level, ptep, &pte, > > KVM_PGTABLE_WALK_LEAF); > > - pte = *ptep; > > - table = kvm_pte_table(pte, level); > > } > > > > if (ret) > > goto out; > > Rather than passing a pointer to the local variable pte and requiring > all downstream code to update it (and deal with dereferencing to read > the old pte), wouldn't it be simpler to just re-read the PTE here? Yeah, you're right. I had some odd rationalization about this, but there's no need to force a walker to descend into the new table level as it is wasted work if another thread unlinks it. [...] > > > > + table = kvm_pte_table(pte, level); > > if (!table) { > > nit: Technically there's no reason to set @table again. e.g. This could > just be: > > if (!kvm_pte_table(pte, level)) { Sure, I'll squish these lines together. -- Thanks, Oliver _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm