On 5/26/22 16:30, Peter Xu wrote:
On Thu, May 26, 2022 at 02:01:43PM +0200, Paolo Bonzini wrote:
On 5/26/22 01:09, Ben Gardon wrote:
+ WARN_ON(max_mapping_level < iter.level);
+
+ /*
+ * If this page is already mapped at the highest
+ * viable level, there's nothing more to do.
+ */
+ if (max_mapping_level == iter.level)
+ continue;
+
+ /*
+ * The page can be remapped at a higher level, so step
+ * up to zap the parent SPTE.
+ */
+ while (max_mapping_level > iter.level)
+ tdp_iter_step_up(&iter);
+
/* Note, a successful atomic zap also does a remote TLB flush. */
- if (tdp_mmu_zap_spte_atomic(kvm, &iter))
- goto retry;
+ tdp_mmu_zap_spte_atomic(kvm, &iter);
+
Can you make this a sparate function (for example
tdp_mmu_zap_collapsible_spte_atomic)? Otherwise looks great!
There could be a tiny downside of using a helper in that it'll hide the
step-up of the iterator, which might not be as obvious as keeping it in the
loop?
That's true, my reasoning is that zapping at a higher level can only be
done by first moving the iterator up. Maybe
tdp_mmu_zap_at_level_atomic() is a better Though, I can very well apply
this patch as is.
Paolo