diff options
Diffstat (limited to 'arch/powerpc/kvm/book3s_64_mmu_host.c')
-rw-r--r-- | arch/powerpc/kvm/book3s_64_mmu_host.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/powerpc/kvm/book3s_64_mmu_host.c b/arch/powerpc/kvm/book3s_64_mmu_host.c index 6b2c80e49681..ead58e317294 100644 --- a/arch/powerpc/kvm/book3s_64_mmu_host.c +++ b/arch/powerpc/kvm/book3s_64_mmu_host.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | void kvmppc_mmu_invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte) | 34 | void kvmppc_mmu_invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte) |
35 | { | 35 | { |
36 | ppc_md.hpte_invalidate(pte->slot, pte->host_va, | 36 | ppc_md.hpte_invalidate(pte->slot, pte->host_vpn, |
37 | MMU_PAGE_4K, MMU_SEGSIZE_256M, | 37 | MMU_PAGE_4K, MMU_SEGSIZE_256M, |
38 | false); | 38 | false); |
39 | } | 39 | } |
@@ -80,8 +80,9 @@ static struct kvmppc_sid_map *find_sid_vsid(struct kvm_vcpu *vcpu, u64 gvsid) | |||
80 | 80 | ||
81 | int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) | 81 | int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) |
82 | { | 82 | { |
83 | unsigned long vpn; | ||
83 | pfn_t hpaddr; | 84 | pfn_t hpaddr; |
84 | ulong hash, hpteg, va; | 85 | ulong hash, hpteg; |
85 | u64 vsid; | 86 | u64 vsid; |
86 | int ret; | 87 | int ret; |
87 | int rflags = 0x192; | 88 | int rflags = 0x192; |
@@ -92,7 +93,7 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) | |||
92 | 93 | ||
93 | /* Get host physical address for gpa */ | 94 | /* Get host physical address for gpa */ |
94 | hpaddr = kvmppc_gfn_to_pfn(vcpu, orig_pte->raddr >> PAGE_SHIFT); | 95 | hpaddr = kvmppc_gfn_to_pfn(vcpu, orig_pte->raddr >> PAGE_SHIFT); |
95 | if (is_error_pfn(hpaddr)) { | 96 | if (is_error_noslot_pfn(hpaddr)) { |
96 | printk(KERN_INFO "Couldn't get guest page for gfn %lx!\n", orig_pte->eaddr); | 97 | printk(KERN_INFO "Couldn't get guest page for gfn %lx!\n", orig_pte->eaddr); |
97 | r = -EINVAL; | 98 | r = -EINVAL; |
98 | goto out; | 99 | goto out; |
@@ -117,7 +118,7 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) | |||
117 | } | 118 | } |
118 | 119 | ||
119 | vsid = map->host_vsid; | 120 | vsid = map->host_vsid; |
120 | va = hpt_va(orig_pte->eaddr, vsid, MMU_SEGSIZE_256M); | 121 | vpn = hpt_vpn(orig_pte->eaddr, vsid, MMU_SEGSIZE_256M); |
121 | 122 | ||
122 | if (!orig_pte->may_write) | 123 | if (!orig_pte->may_write) |
123 | rflags |= HPTE_R_PP; | 124 | rflags |= HPTE_R_PP; |
@@ -129,7 +130,7 @@ int kvmppc_mmu_map_page(struct kvm_vcpu *vcpu, struct kvmppc_pte *orig_pte) | |||
129 | else | 130 | else |
130 | kvmppc_mmu_flush_icache(hpaddr >> PAGE_SHIFT); | 131 | kvmppc_mmu_flush_icache(hpaddr >> PAGE_SHIFT); |
131 | 132 | ||
132 | hash = hpt_hash(va, PTE_SIZE, MMU_SEGSIZE_256M); | 133 | hash = hpt_hash(vpn, PTE_SIZE, MMU_SEGSIZE_256M); |
133 | 134 | ||
134 | map_again: | 135 | map_again: |
135 | hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP); | 136 | hpteg = ((hash & htab_hash_mask) * HPTES_PER_GROUP); |
@@ -141,7 +142,8 @@ map_again: | |||
141 | goto out; | 142 | goto out; |
142 | } | 143 | } |
143 | 144 | ||
144 | ret = ppc_md.hpte_insert(hpteg, va, hpaddr, rflags, vflags, MMU_PAGE_4K, MMU_SEGSIZE_256M); | 145 | ret = ppc_md.hpte_insert(hpteg, vpn, hpaddr, rflags, vflags, |
146 | MMU_PAGE_4K, MMU_SEGSIZE_256M); | ||
145 | 147 | ||
146 | if (ret < 0) { | 148 | if (ret < 0) { |
147 | /* If we couldn't map a primary PTE, try a secondary */ | 149 | /* If we couldn't map a primary PTE, try a secondary */ |
@@ -152,7 +154,8 @@ map_again: | |||
152 | } else { | 154 | } else { |
153 | struct hpte_cache *pte = kvmppc_mmu_hpte_cache_next(vcpu); | 155 | struct hpte_cache *pte = kvmppc_mmu_hpte_cache_next(vcpu); |
154 | 156 | ||
155 | trace_kvm_book3s_64_mmu_map(rflags, hpteg, va, hpaddr, orig_pte); | 157 | trace_kvm_book3s_64_mmu_map(rflags, hpteg, |
158 | vpn, hpaddr, orig_pte); | ||
156 | 159 | ||
157 | /* The ppc_md code may give us a secondary entry even though we | 160 | /* The ppc_md code may give us a secondary entry even though we |
158 | asked for a primary. Fix up. */ | 161 | asked for a primary. Fix up. */ |
@@ -162,7 +165,7 @@ map_again: | |||
162 | } | 165 | } |
163 | 166 | ||
164 | pte->slot = hpteg + (ret & 7); | 167 | pte->slot = hpteg + (ret & 7); |
165 | pte->host_va = va; | 168 | pte->host_vpn = vpn; |
166 | pte->pte = *orig_pte; | 169 | pte->pte = *orig_pte; |
167 | pte->pfn = hpaddr >> PAGE_SHIFT; | 170 | pte->pfn = hpaddr >> PAGE_SHIFT; |
168 | 171 | ||