KVM: PPC: Book3S HV: radix use the Linux translation flush functions for partition sc
Subsystems (2)
Nicholas Piggin
reviewerPATCH v3 5/8 KVM: PPC: Book3S HV: radix use the Linux translation flush functions for partition sc
This has the advantage of consolidating TLB flush code in fewer places, and it also implements powerpc:tlbie trace events.
Signed-off-by Nicholas Piggin <[email protected]>
--- arch/powerpc/kvm/book3s_64_mmu_radix.c | 36 ++++++-------------------- 1 file changed, 8 insertions(+), 28 deletions(-)
arch/powerpc/kvm/book3s_64_mmu_radix.c +8 -28
@@ -139,41 +139,21 @@ int kvmppc_mmu_radix_xlate(struct kvm_vcpu *vcpu, gva_t eaddr,return 0 ; } -#ifdef CONFIG_PPC_64K_PAGES -#define MMU_BASE_PSIZE MMU_PAGE_64K -#else -#define MMU_BASE_PSIZE MMU_PAGE_4K -#endif -static void kvmppc_radix_tlbie_page (struct kvm *kvm,unsigned long addr,unsigned int pshift) { -int psize =MMU_BASE_PSIZE ; - -if (pshift >=PUD_SHIFT ) - psize =MMU_PAGE_1G ; -else if (pshift >=PMD_SHIFT ) - psize =MMU_PAGE_2M ; - addr &= ~0xfffUL ; - addr |= mmu_psize_defs[psize].ap <<5 ; - asmvolatile ("ptesync" : : :"memory" ); - asm volatile(PPC_TLBIE_5(%0, %1, 0, 0, 1) - : : "r" (addr), "r" (kvm->arch.lpid) : "memory"); -if (cpu_has_feature (CPU_FTR_P9_TLBIE_BUG )) - asm volatile(PPC_TLBIE_5(%0, %1, 0, 0, 1) - : : "r" (addr), "r" (kvm->arch.lpid) : "memory"); - asmvolatile ("eieio ; tlbsync ; ptesync" : : :"memory" ); +unsigned long psize =PAGE_SIZE ; + +if (pshift) + psize =1UL << pshift; + + addr &= ~(psize -1 ); +radix__flush_tlb_lpid_page (kvm->arch.lpid, addr, psize); }static void kvmppc_radix_flush_pwc (struct kvm *kvm) { -unsigned long rb =0x2 <<PPC_BITLSHIFT (53 );/* IS = 2 */ - - asmvolatile ("ptesync" : : :"memory" ); -/* RIC=1 PRS=0 R=1 IS=2 */ - asm volatile(PPC_TLBIE_5(%0, %1, 1, 0, 1) - : : "r" (rb), "r" (kvm->arch.lpid) : "memory"); - asmvolatile ("eieio ; tlbsync ; ptesync" : : :"memory" ); +radix__flush_pwc_lpid (kvm->arch.lpid); } unsigned long kvmppc_radix_update_pte(struct kvm *kvm, pte_t *ptep,
Signature · 1 line
2.17.0