aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c5
-rw-r--r--arch/powerpc/kvm/book3s_32_mmu_host.c21
2 files changed, 13 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index 2b7c43f95bb..bc9f39d2598 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -178,11 +178,6 @@ EXPORT_SYMBOL(switch_mmu_context);
178extern long mol_trampoline; 178extern long mol_trampoline;
179EXPORT_SYMBOL(mol_trampoline); /* For MOL */ 179EXPORT_SYMBOL(mol_trampoline); /* For MOL */
180EXPORT_SYMBOL(flush_hash_pages); /* For MOL */ 180EXPORT_SYMBOL(flush_hash_pages); /* For MOL */
181
182extern struct hash_pte *Hash;
183extern unsigned long _SDR1;
184EXPORT_SYMBOL_GPL(Hash); /* For KVM */
185EXPORT_SYMBOL_GPL(_SDR1); /* For KVM */
186#ifdef CONFIG_SMP 181#ifdef CONFIG_SMP
187extern int mmu_hash_lock; 182extern int mmu_hash_lock;
188EXPORT_SYMBOL(mmu_hash_lock); /* For MOL */ 183EXPORT_SYMBOL(mmu_hash_lock); /* For MOL */
diff --git a/arch/powerpc/kvm/book3s_32_mmu_host.c b/arch/powerpc/kvm/book3s_32_mmu_host.c
index 2bb67e633de..0bb66005338 100644
--- a/arch/powerpc/kvm/book3s_32_mmu_host.c
+++ b/arch/powerpc/kvm/book3s_32_mmu_host.c
@@ -54,6 +54,9 @@
54#error Only 32 bit pages are supported for now 54#error Only 32 bit pages are supported for now
55#endif 55#endif
56 56
57static ulong htab;
58static u32 htabmask;
59
57static void invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte) 60static void invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte)
58{ 61{
59 volatile u32 *pteg; 62 volatile u32 *pteg;
@@ -217,14 +220,11 @@ static struct kvmppc_sid_map *find_sid_vsid(struct kvm_vcpu *vcpu, u64 gvsid)
217 return NULL; 220 return NULL;
218} 221}
219 222
220extern struct hash_pte *Hash;
221extern unsigned long _SDR1;
222
223static u32 *kvmppc_mmu_get_pteg(struct kvm_vcpu *vcpu, u32 vsid, u32 eaddr, 223static u32 *kvmppc_mmu_get_pteg(struct kvm_vcpu *vcpu, u32 vsid, u32 eaddr,
224 bool primary) 224 bool primary)
225{ 225{
226 u32 page, hash, htabmask; 226 u32 page, hash;
227 ulong pteg = (ulong)Hash; 227 ulong pteg = htab;
228 228
229 page = (eaddr & ~ESID_MASK) >> 12; 229 page = (eaddr & ~ESID_MASK) >> 12;
230 230
@@ -232,13 +232,12 @@ static u32 *kvmppc_mmu_get_pteg(struct kvm_vcpu *vcpu, u32 vsid, u32 eaddr,
232 if (!primary) 232 if (!primary)
233 hash = ~hash; 233 hash = ~hash;
234 234
235 htabmask = ((_SDR1 & 0x1FF) << 16) | 0xFFC0;
236 hash &= htabmask; 235 hash &= htabmask;
237 236
238 pteg |= hash; 237 pteg |= hash;
239 238
240 dprintk_mmu("htab: %p | hash: %x | htabmask: %x | pteg: %lx\n", 239 dprintk_mmu("htab: %lx | hash: %x | htabmask: %x | pteg: %lx\n",
241 Hash, hash, htabmask, pteg); 240 htab, hash, htabmask, pteg);
242 241
243 return (u32*)pteg; 242 return (u32*)pteg;
244} 243}
@@ -453,6 +452,7 @@ int kvmppc_mmu_init(struct kvm_vcpu *vcpu)
453{ 452{
454 struct kvmppc_vcpu_book3s *vcpu3s = to_book3s(vcpu); 453 struct kvmppc_vcpu_book3s *vcpu3s = to_book3s(vcpu);
455 int err; 454 int err;
455 ulong sdr1;
456 456
457 err = __init_new_context(); 457 err = __init_new_context();
458 if (err < 0) 458 if (err < 0)
@@ -474,5 +474,10 @@ int kvmppc_mmu_init(struct kvm_vcpu *vcpu)
474 474
475 vcpu3s->vsid_next = vcpu3s->vsid_first; 475 vcpu3s->vsid_next = vcpu3s->vsid_first;
476 476
477 /* Remember where the HTAB is */
478 asm ( "mfsdr1 %0" : "=r"(sdr1) );
479 htabmask = ((sdr1 & 0x1FF) << 16) | 0xFFC0;
480 htab = (ulong)__va(sdr1 & 0xffff0000);
481
477 return 0; 482 return 0;
478} 483}