projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
cf1c5ca
)
KVM: PPC: E500: Fix clear_tlb_refs
author
Alexander Graf
<agraf@suse.de>
Thu, 2 Aug 2012 11:38:49 +0000
(13:38 +0200)
committer
Alexander Graf
<agraf@suse.de>
Fri, 5 Oct 2012 21:38:40 +0000
(23:38 +0200)
Our mapping code assumes that TLB0 entries are always mapped. However, after
calling clear_tlb_refs() this is no longer the case.
Map them dynamically if we find an entry unmapped in TLB0.
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/kvm/e500_tlb.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/kvm/e500_tlb.c
b/arch/powerpc/kvm/e500_tlb.c
index
ff38b66
..
b56b6e1
100644
(file)
--- a/
arch/powerpc/kvm/e500_tlb.c
+++ b/
arch/powerpc/kvm/e500_tlb.c
@@
-1039,8
+1039,12
@@
void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 eaddr, gpa_t gpaddr,
sesel = 0; /* unused */
priv = &vcpu_e500->gtlb_priv[tlbsel][esel];
- kvmppc_e500_setup_stlbe(vcpu, gtlbe, BOOK3E_PAGESZ_4K,
- &priv->ref, eaddr, &stlbe);
+ /* Only triggers after clear_tlb_refs */
+ if (unlikely(!(priv->ref.flags & E500_TLB_VALID)))
+ kvmppc_e500_tlb0_map(vcpu_e500, esel, &stlbe);
+ else
+ kvmppc_e500_setup_stlbe(vcpu, gtlbe, BOOK3E_PAGESZ_4K,
+ &priv->ref, eaddr, &stlbe);
break;
case 1: {