diff options
-rw-r--r-- | virt/kvm/kvm_main.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 92f5c98b6c4d..c10d117c4317 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -341,6 +341,20 @@ static const struct mmu_notifier_ops kvm_mmu_notifier_ops = { | |||
341 | .change_pte = kvm_mmu_notifier_change_pte, | 341 | .change_pte = kvm_mmu_notifier_change_pte, |
342 | .release = kvm_mmu_notifier_release, | 342 | .release = kvm_mmu_notifier_release, |
343 | }; | 343 | }; |
344 | |||
345 | static int kvm_init_mmu_notifier(struct kvm *kvm) | ||
346 | { | ||
347 | kvm->mmu_notifier.ops = &kvm_mmu_notifier_ops; | ||
348 | return mmu_notifier_register(&kvm->mmu_notifier, current->mm); | ||
349 | } | ||
350 | |||
351 | #else /* !(CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER) */ | ||
352 | |||
353 | static int kvm_init_mmu_notifier(struct kvm *kvm) | ||
354 | { | ||
355 | return 0; | ||
356 | } | ||
357 | |||
344 | #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */ | 358 | #endif /* CONFIG_MMU_NOTIFIER && KVM_ARCH_WANT_MMU_NOTIFIER */ |
345 | 359 | ||
346 | static struct kvm *kvm_create_vm(void) | 360 | static struct kvm *kvm_create_vm(void) |
@@ -373,11 +387,7 @@ static struct kvm *kvm_create_vm(void) | |||
373 | (struct kvm_coalesced_mmio_ring *)page_address(page); | 387 | (struct kvm_coalesced_mmio_ring *)page_address(page); |
374 | #endif | 388 | #endif |
375 | 389 | ||
376 | #if defined(CONFIG_MMU_NOTIFIER) && defined(KVM_ARCH_WANT_MMU_NOTIFIER) | 390 | r = kvm_init_mmu_notifier(kvm); |
377 | kvm->mmu_notifier.ops = &kvm_mmu_notifier_ops; | ||
378 | r = mmu_notifier_register(&kvm->mmu_notifier, current->mm); | ||
379 | #endif | ||
380 | |||
381 | if (r) { | 391 | if (r) { |
382 | #ifdef KVM_COALESCED_MMIO_PAGE_OFFSET | 392 | #ifdef KVM_COALESCED_MMIO_PAGE_OFFSET |
383 | put_page(page); | 393 | put_page(page); |