Lines Matching refs:slbe
63 static int kvmppc_slb_sid_shift(struct kvmppc_slb *slbe)
65 return slbe->tb ? SID_SHIFT_1T : SID_SHIFT;
68 static u64 kvmppc_slb_offset_mask(struct kvmppc_slb *slbe)
70 return (1ul << kvmppc_slb_sid_shift(slbe)) - 1;
104 static int kvmppc_mmu_book3s_64_get_pagesize(struct kvmppc_slb *slbe)
106 return mmu_pagesize(slbe->base_page_size);
109 static u32 kvmppc_mmu_book3s_64_get_page(struct kvmppc_slb *slbe, gva_t eaddr)
111 int p = kvmppc_mmu_book3s_64_get_pagesize(slbe);
113 return ((eaddr & kvmppc_slb_offset_mask(slbe)) >> p);
117 struct kvmppc_slb *slbe, gva_t eaddr,
128 vpn = kvmppc_slb_calc_vpn(slbe, eaddr);
129 ssize = slbe->tb ? MMU_SEGSIZE_1T : MMU_SEGSIZE_256M;
130 hash = hpt_hash(vpn, kvmppc_mmu_book3s_64_get_pagesize(slbe), ssize);
141 page, vcpu_book3s->sdr1, pteg, slbe->vsid);
155 static u64 kvmppc_mmu_book3s_64_get_avpn(struct kvmppc_slb *slbe, gva_t eaddr)
157 int p = kvmppc_mmu_book3s_64_get_pagesize(slbe);
160 avpn = kvmppc_mmu_book3s_64_get_page(slbe, eaddr);
161 avpn |= slbe->vsid << (kvmppc_slb_sid_shift(slbe) - p);
176 static int decode_pagesize(struct kvmppc_slb *slbe, u64 r)
178 switch (slbe->base_page_size) {
195 struct kvmppc_slb *slbe;
226 slbe = kvmppc_mmu_book3s_64_find_slbe(vcpu, eaddr);
227 if (!slbe)
230 avpn = kvmppc_mmu_book3s_64_get_avpn(slbe, eaddr);
233 if (slbe->tb)
235 if (slbe->large)
242 pgsize = slbe->large ? MMU_PAGE_16M : MMU_PAGE_4K;
247 ptegp = kvmppc_mmu_book3s_64_get_pteg(vcpu, slbe, eaddr, second);
257 if ((kvmppc_get_msr(vcpu) & MSR_PR) && slbe->Kp)
259 else if (!(kvmppc_get_msr(vcpu) & MSR_PR) && slbe->Ks)
269 if (slbe->large &&
271 pgsize = decode_pagesize(slbe, pte1);
368 struct kvmppc_slb *slbe;
379 slbe = &vcpu->arch.slb[slb_nr];
381 slbe->large = (rs & SLB_VSID_L) ? 1 : 0;
382 slbe->tb = (rs & SLB_VSID_B_1T) ? 1 : 0;
383 slbe->esid = slbe->tb ? esid_1t : esid;
384 slbe->vsid = (rs & ~SLB_VSID_B) >> (kvmppc_slb_sid_shift(slbe) - 16);
385 slbe->valid = (rb & SLB_ESID_V) ? 1 : 0;
386 slbe->Ks = (rs & SLB_VSID_KS) ? 1 : 0;
387 slbe->Kp = (rs & SLB_VSID_KP) ? 1 : 0;
388 slbe->nx = (rs & SLB_VSID_N) ? 1 : 0;
389 slbe->class = (rs & SLB_VSID_C) ? 1 : 0;
391 slbe->base_page_size = MMU_PAGE_4K;
392 if (slbe->large) {
396 slbe->base_page_size = MMU_PAGE_16M;
399 slbe->base_page_size = MMU_PAGE_64K;
403 slbe->base_page_size = MMU_PAGE_16M;
406 slbe->orige = rb & (ESID_MASK | SLB_ESID_V);
407 slbe->origv = rs;
416 struct kvmppc_slb *slbe = kvmppc_mmu_book3s_64_find_slbe(vcpu, eaddr);
418 if (slbe) {
419 *ret_slb = slbe->origv;
428 struct kvmppc_slb *slbe;
433 slbe = &vcpu->arch.slb[slb_nr];
435 return slbe->orige;
440 struct kvmppc_slb *slbe;
445 slbe = &vcpu->arch.slb[slb_nr];
447 return slbe->origv;
452 struct kvmppc_slb *slbe;
457 slbe = kvmppc_mmu_book3s_64_find_slbe(vcpu, ea);
459 if (!slbe)
462 dprintk("KVM MMU: slbie(0x%llx, 0x%llx)\n", ea, slbe->esid);
464 slbe->valid = false;
465 slbe->orige = 0;
466 slbe->origv = 0;
468 seg_size = 1ull << kvmppc_slb_sid_shift(slbe);