powerpc/64s/radix: keep kernel ERAT over local process/guest invalidates
[sfrench/cifs-2.6.git] / arch / powerpc / kvm / book3s_hv_builtin.c
index ca4f006abd771cd7cd535179ba584ea0fa32d117..8fa93114d6301e03081a2434c6cca8095118b3f7 100644 (file)
@@ -823,6 +823,8 @@ static void flush_guest_tlb(struct kvm *kvm)
                                     : : "r" (rb), "i" (1), "i" (1), "i" (0),
                                       "r" (0) : "memory");
                }
+               asm volatile("ptesync": : :"memory");
+               asm volatile(PPC_RADIX_INVALIDATE_ERAT_GUEST : : :"memory");
        } else {
                for (set = 0; set < kvm->arch.tlb_sets; ++set) {
                        /* R=0 PRS=0 RIC=0 */
@@ -831,9 +833,9 @@ static void flush_guest_tlb(struct kvm *kvm)
                                       "r" (0) : "memory");
                        rb += PPC_BIT(51);      /* increment set number */
                }
+               asm volatile("ptesync": : :"memory");
+               asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory");
        }
-       asm volatile("ptesync": : :"memory");
-       asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory");
 }
 
 void kvmppc_check_need_tlb_flush(struct kvm *kvm, int pcpu,