diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_book3s.h | 3 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_64_mmu.c | 10 |
2 files changed, 8 insertions, 5 deletions
diff --git a/arch/powerpc/include/asm/kvm_book3s.h b/arch/powerpc/include/asm/kvm_book3s.h index 79ab8faf18e..c7db69f1e77 100644 --- a/arch/powerpc/include/asm/kvm_book3s.h +++ b/arch/powerpc/include/asm/kvm_book3s.h | |||
@@ -34,7 +34,8 @@ struct kvmppc_slb { | |||
34 | bool Ks; | 34 | bool Ks; |
35 | bool Kp; | 35 | bool Kp; |
36 | bool nx; | 36 | bool nx; |
37 | bool large; | 37 | bool large; /* PTEs are 16MB */ |
38 | bool tb; /* 1TB segment */ | ||
38 | bool class; | 39 | bool class; |
39 | }; | 40 | }; |
40 | 41 | ||
diff --git a/arch/powerpc/kvm/book3s_64_mmu.c b/arch/powerpc/kvm/book3s_64_mmu.c index e4beeb371a7..512dcff7755 100644 --- a/arch/powerpc/kvm/book3s_64_mmu.c +++ b/arch/powerpc/kvm/book3s_64_mmu.c | |||
@@ -54,7 +54,7 @@ static struct kvmppc_slb *kvmppc_mmu_book3s_64_find_slbe( | |||
54 | if (!vcpu_book3s->slb[i].valid) | 54 | if (!vcpu_book3s->slb[i].valid) |
55 | continue; | 55 | continue; |
56 | 56 | ||
57 | if (vcpu_book3s->slb[i].large) | 57 | if (vcpu_book3s->slb[i].tb) |
58 | cmp_esid = esid_1t; | 58 | cmp_esid = esid_1t; |
59 | 59 | ||
60 | if (vcpu_book3s->slb[i].esid == cmp_esid) | 60 | if (vcpu_book3s->slb[i].esid == cmp_esid) |
@@ -65,9 +65,10 @@ static struct kvmppc_slb *kvmppc_mmu_book3s_64_find_slbe( | |||
65 | eaddr, esid, esid_1t); | 65 | eaddr, esid, esid_1t); |
66 | for (i = 0; i < vcpu_book3s->slb_nr; i++) { | 66 | for (i = 0; i < vcpu_book3s->slb_nr; i++) { |
67 | if (vcpu_book3s->slb[i].vsid) | 67 | if (vcpu_book3s->slb[i].vsid) |
68 | dprintk(" %d: %c%c %llx %llx\n", i, | 68 | dprintk(" %d: %c%c%c %llx %llx\n", i, |
69 | vcpu_book3s->slb[i].valid ? 'v' : ' ', | 69 | vcpu_book3s->slb[i].valid ? 'v' : ' ', |
70 | vcpu_book3s->slb[i].large ? 'l' : ' ', | 70 | vcpu_book3s->slb[i].large ? 'l' : ' ', |
71 | vcpu_book3s->slb[i].tb ? 't' : ' ', | ||
71 | vcpu_book3s->slb[i].esid, | 72 | vcpu_book3s->slb[i].esid, |
72 | vcpu_book3s->slb[i].vsid); | 73 | vcpu_book3s->slb[i].vsid); |
73 | } | 74 | } |
@@ -84,7 +85,7 @@ static u64 kvmppc_mmu_book3s_64_ea_to_vp(struct kvm_vcpu *vcpu, gva_t eaddr, | |||
84 | if (!slb) | 85 | if (!slb) |
85 | return 0; | 86 | return 0; |
86 | 87 | ||
87 | if (slb->large) | 88 | if (slb->tb) |
88 | return (((u64)eaddr >> 12) & 0xfffffff) | | 89 | return (((u64)eaddr >> 12) & 0xfffffff) | |
89 | (((u64)slb->vsid) << 28); | 90 | (((u64)slb->vsid) << 28); |
90 | 91 | ||
@@ -309,7 +310,8 @@ static void kvmppc_mmu_book3s_64_slbmte(struct kvm_vcpu *vcpu, u64 rs, u64 rb) | |||
309 | slbe = &vcpu_book3s->slb[slb_nr]; | 310 | slbe = &vcpu_book3s->slb[slb_nr]; |
310 | 311 | ||
311 | slbe->large = (rs & SLB_VSID_L) ? 1 : 0; | 312 | slbe->large = (rs & SLB_VSID_L) ? 1 : 0; |
312 | slbe->esid = slbe->large ? esid_1t : esid; | 313 | slbe->tb = (rs & SLB_VSID_B_1T) ? 1 : 0; |
314 | slbe->esid = slbe->tb ? esid_1t : esid; | ||
313 | slbe->vsid = rs >> 12; | 315 | slbe->vsid = rs >> 12; |
314 | slbe->valid = (rb & SLB_ESID_V) ? 1 : 0; | 316 | slbe->valid = (rb & SLB_ESID_V) ? 1 : 0; |
315 | slbe->Ks = (rs & SLB_VSID_KS) ? 1 : 0; | 317 | slbe->Ks = (rs & SLB_VSID_KS) ? 1 : 0; |