KVM: move postcommit flush to x86, as mmio sptes are x86 specific
Other arches do not need this. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> v2: fix incorrect deletion of mmio sptes on gpa move (noticed by Takuya) Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Родитель
12d6e7538e
Коммит
3b4dc3a031
|
@ -6445,6 +6445,14 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
|
||||||
kvm_mmu_change_mmu_pages(kvm, nr_mmu_pages);
|
kvm_mmu_change_mmu_pages(kvm, nr_mmu_pages);
|
||||||
kvm_mmu_slot_remove_write_access(kvm, mem->slot);
|
kvm_mmu_slot_remove_write_access(kvm, mem->slot);
|
||||||
spin_unlock(&kvm->mmu_lock);
|
spin_unlock(&kvm->mmu_lock);
|
||||||
|
/*
|
||||||
|
* If memory slot is created, or moved, we need to clear all
|
||||||
|
* mmio sptes.
|
||||||
|
*/
|
||||||
|
if (npages && old.base_gfn != mem->guest_phys_addr >> PAGE_SHIFT) {
|
||||||
|
kvm_mmu_zap_all(kvm);
|
||||||
|
kvm_reload_remote_mmus(kvm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_arch_flush_shadow_all(struct kvm *kvm)
|
void kvm_arch_flush_shadow_all(struct kvm *kvm)
|
||||||
|
|
|
@ -849,13 +849,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
|
||||||
|
|
||||||
kvm_arch_commit_memory_region(kvm, mem, old, user_alloc);
|
kvm_arch_commit_memory_region(kvm, mem, old, user_alloc);
|
||||||
|
|
||||||
/*
|
|
||||||
* If the new memory slot is created, we need to clear all
|
|
||||||
* mmio sptes.
|
|
||||||
*/
|
|
||||||
if (npages && old.base_gfn != mem->guest_phys_addr >> PAGE_SHIFT)
|
|
||||||
kvm_arch_flush_shadow_all(kvm);
|
|
||||||
|
|
||||||
kvm_free_physmem_slot(&old, &new);
|
kvm_free_physmem_slot(&old, &new);
|
||||||
kfree(old_memslots);
|
kfree(old_memslots);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче