KVM: arm: Add ARMv7 API to flush TLBs
This patch adds ARMv7 architecture TLB Flush function. Acked-by: Marc Zyngier <marc.zyngier@arm.com> Acked-by: Christoffer Dall <christoffer.dall@linaro.org> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
This commit is contained in:
Родитель
e108ff2f80
Коммит
72fc36b600
|
@ -96,6 +96,7 @@ extern char __kvm_hyp_code_end[];
|
||||||
|
|
||||||
extern void __kvm_flush_vm_context(void);
|
extern void __kvm_flush_vm_context(void);
|
||||||
extern void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa);
|
extern void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa);
|
||||||
|
extern void __kvm_tlb_flush_vmid(struct kvm *kvm);
|
||||||
|
|
||||||
extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu);
|
extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -221,6 +221,18 @@ static inline void __cpu_init_hyp_mode(phys_addr_t boot_pgd_ptr,
|
||||||
kvm_call_hyp((void*)hyp_stack_ptr, vector_ptr, pgd_ptr);
|
kvm_call_hyp((void*)hyp_stack_ptr, vector_ptr, pgd_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* kvm_flush_remote_tlbs() - flush all VM TLB entries
|
||||||
|
* @kvm: pointer to kvm structure.
|
||||||
|
*
|
||||||
|
* Interface to HYP function to flush all VM TLB entries without address
|
||||||
|
* parameter.
|
||||||
|
*/
|
||||||
|
static inline void kvm_flush_remote_tlbs(struct kvm *kvm)
|
||||||
|
{
|
||||||
|
kvm_call_hyp(__kvm_tlb_flush_vmid, kvm);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int kvm_arch_dev_ioctl_check_extension(long ext)
|
static inline int kvm_arch_dev_ioctl_check_extension(long ext)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -21,6 +21,7 @@ config KVM
|
||||||
select PREEMPT_NOTIFIERS
|
select PREEMPT_NOTIFIERS
|
||||||
select ANON_INODES
|
select ANON_INODES
|
||||||
select HAVE_KVM_CPU_RELAX_INTERCEPT
|
select HAVE_KVM_CPU_RELAX_INTERCEPT
|
||||||
|
select HAVE_KVM_ARCH_TLB_FLUSH_ALL
|
||||||
select KVM_MMIO
|
select KVM_MMIO
|
||||||
select KVM_ARM_HOST
|
select KVM_ARM_HOST
|
||||||
depends on ARM_VIRT_EXT && ARM_LPAE
|
depends on ARM_VIRT_EXT && ARM_LPAE
|
||||||
|
|
|
@ -66,6 +66,17 @@ ENTRY(__kvm_tlb_flush_vmid_ipa)
|
||||||
bx lr
|
bx lr
|
||||||
ENDPROC(__kvm_tlb_flush_vmid_ipa)
|
ENDPROC(__kvm_tlb_flush_vmid_ipa)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* void __kvm_tlb_flush_vmid(struct kvm *kvm) - Flush per-VMID TLBs
|
||||||
|
*
|
||||||
|
* Reuses __kvm_tlb_flush_vmid_ipa() for ARMv7, without passing address
|
||||||
|
* parameter
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY(__kvm_tlb_flush_vmid)
|
||||||
|
b __kvm_tlb_flush_vmid_ipa
|
||||||
|
ENDPROC(__kvm_tlb_flush_vmid)
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* Flush TLBs and instruction caches of all CPUs inside the inner-shareable
|
* Flush TLBs and instruction caches of all CPUs inside the inner-shareable
|
||||||
* domain, for all VMIDs
|
* domain, for all VMIDs
|
||||||
|
|
Загрузка…
Ссылка в новой задаче