diff options
Diffstat (limited to 'arch/powerpc/kvm/e500_mmu.c')
| -rw-r--r-- | arch/powerpc/kvm/e500_mmu.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/e500_mmu.c b/arch/powerpc/kvm/e500_mmu.c index c41a5a96b558..6d6f153b6c1d 100644 --- a/arch/powerpc/kvm/e500_mmu.c +++ b/arch/powerpc/kvm/e500_mmu.c @@ -396,6 +396,7 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu)  	struct kvm_book3e_206_tlb_entry *gtlbe;  	int tlbsel, esel;  	int recal = 0; +	int idx;  	tlbsel = get_tlb_tlbsel(vcpu);  	esel = get_tlb_esel(vcpu, tlbsel); @@ -430,6 +431,8 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu)  			kvmppc_set_tlb1map_range(vcpu, gtlbe);  	} +	idx = srcu_read_lock(&vcpu->kvm->srcu); +  	/* Invalidate shadow mappings for the about-to-be-clobbered TLBE. */  	if (tlbe_is_host_safe(vcpu, gtlbe)) {  		u64 eaddr = get_tlb_eaddr(gtlbe); @@ -444,6 +447,8 @@ int kvmppc_e500_emul_tlbwe(struct kvm_vcpu *vcpu)  		kvmppc_mmu_map(vcpu, eaddr, raddr, index_of(tlbsel, esel));  	} +	srcu_read_unlock(&vcpu->kvm->srcu, idx); +  	kvmppc_set_exit_type(vcpu, EMULATED_TLBWE_EXITS);  	return EMULATE_DONE;  }  | 
