KVM: MIPS: let generic code call prepare_flush_shadow
Since all calls to kvm_flush_remote_tlbs must be preceded by kvm_mips_callbacks->prepare_flush_shadow, repurpose kvm_arch_flush_remote_tlb to invoke it. This makes it possible to use the TLB flushing mechanism provided by the generic MMU notifier code. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
5194552fb1
commit
566a0beef5
@ -1142,4 +1142,7 @@ static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu) {}
|
|||||||
static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {}
|
static inline void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu) {}
|
||||||
static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {}
|
static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {}
|
||||||
|
|
||||||
|
#define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLB
|
||||||
|
int kvm_arch_flush_remote_tlb(struct kvm *kvm);
|
||||||
|
|
||||||
#endif /* __MIPS_KVM_HOST_H__ */
|
#endif /* __MIPS_KVM_HOST_H__ */
|
||||||
|
@ -204,9 +204,6 @@ void kvm_arch_flush_shadow_all(struct kvm *kvm)
|
|||||||
{
|
{
|
||||||
/* Flush whole GPA */
|
/* Flush whole GPA */
|
||||||
kvm_mips_flush_gpa_pt(kvm, 0, ~0);
|
kvm_mips_flush_gpa_pt(kvm, 0, ~0);
|
||||||
|
|
||||||
/* Let implementation do the rest */
|
|
||||||
kvm_mips_callbacks->prepare_flush_shadow(kvm);
|
|
||||||
kvm_flush_remote_tlbs(kvm);
|
kvm_flush_remote_tlbs(kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -995,11 +992,15 @@ void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int kvm_arch_flush_remote_tlb(struct kvm *kvm)
|
||||||
|
{
|
||||||
|
kvm_mips_callbacks->prepare_flush_shadow(kvm);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void kvm_arch_flush_remote_tlbs_memslot(struct kvm *kvm,
|
void kvm_arch_flush_remote_tlbs_memslot(struct kvm *kvm,
|
||||||
const struct kvm_memory_slot *memslot)
|
const struct kvm_memory_slot *memslot)
|
||||||
{
|
{
|
||||||
/* Let implementation handle TLB/GVA invalidation */
|
|
||||||
kvm_mips_callbacks->prepare_flush_shadow(kvm);
|
|
||||||
kvm_flush_remote_tlbs(kvm);
|
kvm_flush_remote_tlbs(kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,8 +490,6 @@ int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end,
|
|||||||
unsigned flags)
|
unsigned flags)
|
||||||
{
|
{
|
||||||
handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL);
|
handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL);
|
||||||
|
|
||||||
kvm_mips_callbacks->prepare_flush_shadow(kvm);
|
|
||||||
kvm_flush_remote_tlbs(kvm);
|
kvm_flush_remote_tlbs(kvm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -533,10 +531,8 @@ int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = handle_hva_to_gpa(kvm, hva, end, &kvm_set_spte_handler, &pte);
|
ret = handle_hva_to_gpa(kvm, hva, end, &kvm_set_spte_handler, &pte);
|
||||||
if (ret) {
|
if (ret)
|
||||||
kvm_mips_callbacks->prepare_flush_shadow(kvm);
|
|
||||||
kvm_flush_remote_tlbs(kvm);
|
kvm_flush_remote_tlbs(kvm);
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user