History

KVM: Drop kvm_reload_remote_mmus(), open code request in x86 users

Remove the generic kvm_reload_remote_mmus() and open code its functionality into the two x86 callers. x86 is (obviously) the only architecture that uses the hook, and is also the only architecture that uses KVM_REQ_MMU_RELOAD in a way that's consistent with the name. That will change in a future patch, as x86's usage when zapping a single shadow page x86 doesn't actually _need_ to reload all vCPUs' MMUs, only MMUs whose root is being zapped actually need to be reloaded. s390 also uses KVM_REQ_MMU_RELOAD, but for a slightly different purpose. Drop the generic code in anticipation of implementing s390 and x86 arch specific requests, which will allow dropping KVM_REQ_MMU_RELOAD entirely. Opportunistically reword the x86 TDP MMU comment to avoid making references to functions (and requests!) when possible, and to remove the rather ambiguous "this". No functional change intended.

Sean Christopherson committed 4 years ago

Commit 2f6f66c1 parent f6d0a253 files · +7 −13Browse files

Unified · Split

3 files
  1. arch/x86/kvm/mmu/mmu.c +7 −7
  2. include/linux/kvm_host.h +0 −1
  3. virt/kvm/kvm_main.c +0 −5
arch/x86/kvm/mmu/mmu.c+7−7
@@ -2353,7 +2353,7 @@ static bool __kvm_mmu_prepare_zap_page(struct kvm *kvm, · 2352 unmodified lines
2353 * treats invalid shadow pages as being obsolete.2353 * treats invalid shadow pages as being obsolete.
2354 */2354 */
2355 if (!is_obsolete_sp(kvm, sp))2355 if (!is_obsolete_sp(kvm, sp))
2356 kvm_reload_remote_mmus(kvm);2356 kvm_make_all_cpus_request(kvm, KVM_REQ_MMU_RELOAD);
2357 }2357 }
2358 2358
2359 if (sp->lpage_disallowed)2359 if (sp->lpage_disallowed)
@@ -5639,11 +5639,11 @@ static void kvm_mmu_zap_all_fast(struct kvm *kvm) · 3279 unmodified lines
5639 */5639 */
5640 kvm->arch.mmu_valid_gen = kvm->arch.mmu_valid_gen ? 0 : 1;5640 kvm->arch.mmu_valid_gen = kvm->arch.mmu_valid_gen ? 0 : 1;
5641 5641
5642 /* In order to ensure all threads see this change when5642 /*
5643 * handling the MMU reload signal, this must happen in the5643 * In order to ensure all vCPUs drop their soon-to-be invalid roots,
5644 * same critical section as kvm_reload_remote_mmus, and5644 * invalidating TDP MMU roots must be done while holding mmu_lock for
5645 * before kvm_zap_obsolete_pages as kvm_zap_obsolete_pages5645 * write and in the same critical section as making the reload request,
5646 * could drop the MMU lock and yield.5646 * e.g. before kvm_zap_obsolete_pages() could drop mmu_lock and yield.
5647 */5647 */
5648 if (is_tdp_mmu_enabled(kvm))5648 if (is_tdp_mmu_enabled(kvm))
5649 kvm_tdp_mmu_invalidate_all_roots(kvm);5649 kvm_tdp_mmu_invalidate_all_roots(kvm);
@@ -5656,7 +5656,7 @@ static void kvm_mmu_zap_all_fast(struct kvm *kvm) · 6 unmodified lines
5656 * Note: we need to do this under the protection of mmu_lock,5656 * Note: we need to do this under the protection of mmu_lock,
5657 * otherwise, vcpu would purge shadow page but miss tlb flush.5657 * otherwise, vcpu would purge shadow page but miss tlb flush.
5658 */5658 */
5659 kvm_reload_remote_mmus(kvm);5659 kvm_make_all_cpus_request(kvm, KVM_REQ_MMU_RELOAD);
5660 5660
5661 kvm_zap_obsolete_pages(kvm);5661 kvm_zap_obsolete_pages(kvm);
5662 5662
include/linux/kvm_host.h+0−1
@@ -1325,7 +1325,6 @@ int kvm_vcpu_yield_to(struct kvm_vcpu *target); · 1324 unmodified lines
1325void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu, bool usermode_vcpu_not_eligible);1325void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu, bool usermode_vcpu_not_eligible);
1326 1326
1327void kvm_flush_remote_tlbs(struct kvm *kvm);1327void kvm_flush_remote_tlbs(struct kvm *kvm);
1328void kvm_reload_remote_mmus(struct kvm *kvm);
1329 1328
1330#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE1329#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE
1331int kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int min);1330int kvm_mmu_topup_memory_cache(struct kvm_mmu_memory_cache *mc, int min);
virt/kvm/kvm_main.c+0−5
@@ -354,11 +354,6 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) · 353 unmodified lines
354EXPORT_SYMBOL_GPL(kvm_flush_remote_tlbs);354EXPORT_SYMBOL_GPL(kvm_flush_remote_tlbs);
355#endif355#endif
356 356
357void kvm_reload_remote_mmus(struct kvm *kvm)
358{
359 kvm_make_all_cpus_request(kvm, KVM_REQ_MMU_RELOAD);
360}
361
362#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE357#ifdef KVM_ARCH_NR_OBJS_PER_MEMORY_CACHE
363static inline void *mmu_memory_cache_alloc_obj(struct kvm_mmu_memory_cache *mc,358static inline void *mmu_memory_cache_alloc_obj(struct kvm_mmu_memory_cache *mc,
364 gfp_t gfp_flags)359 gfp_t gfp_flags)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t