On Wed, May 29, 2024 at 2:55 PM Sean Christopherson seanjc@google.com wrote:
On Wed, May 29, 2024, James Houghton wrote:
For implementation mmu_notifier_{test,clear}_young, the KVM memslot walker used to take the MMU lock for us. Now make the architectures take it themselves.
Hmm, *forcing* architectures to take mmu_lock is a step backwards. Rather than add all of this churn, what about adding CONFIG_KVM_MMU_NOTIFIER_LOCKLESS, e.g.
static __always_inline int kvm_handle_hva_range_no_flush(struct mmu_notifier *mn, unsigned long start, unsigned long end, gfn_handler_t handler) { struct kvm *kvm = mmu_notifier_to_kvm(mn); const struct kvm_mmu_notifier_range range = { .start = start, .end = end, .handler = handler, .on_lock = (void *)kvm_null_fn, .flush_on_ret = false, .may_block = false, .lockless = IS_ENABLED(CONFIG_KVM_MMU_NOTIFIER_LOCKLESS), };
return __kvm_handle_hva_range(kvm, &range).ret;
}
Thanks Sean, yes this is a lot better. I will do this for v5.