Lines Matching refs:arch
15 * This file is derived from arch/powerpc/kvm/44x.c,
83 if (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK)
90 vcpu->arch.hflags |= BOOK3S_HFLAG_SPLIT_HACK;
96 if (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK) {
103 vcpu->arch.hflags &= ~BOOK3S_HFLAG_SPLIT_HACK;
115 new_msr = vcpu->arch.intr_msr;
152 current->thread.kvm_shadow_vcpu = vcpu->arch.shadow_vcpu;
196 svcpu->gpr[0] = vcpu->arch.regs.gpr[0];
197 svcpu->gpr[1] = vcpu->arch.regs.gpr[1];
198 svcpu->gpr[2] = vcpu->arch.regs.gpr[2];
199 svcpu->gpr[3] = vcpu->arch.regs.gpr[3];
200 svcpu->gpr[4] = vcpu->arch.regs.gpr[4];
201 svcpu->gpr[5] = vcpu->arch.regs.gpr[5];
202 svcpu->gpr[6] = vcpu->arch.regs.gpr[6];
203 svcpu->gpr[7] = vcpu->arch.regs.gpr[7];
204 svcpu->gpr[8] = vcpu->arch.regs.gpr[8];
205 svcpu->gpr[9] = vcpu->arch.regs.gpr[9];
206 svcpu->gpr[10] = vcpu->arch.regs.gpr[10];
207 svcpu->gpr[11] = vcpu->arch.regs.gpr[11];
208 svcpu->gpr[12] = vcpu->arch.regs.gpr[12];
209 svcpu->gpr[13] = vcpu->arch.regs.gpr[13];
210 svcpu->cr = vcpu->arch.regs.ccr;
211 svcpu->xer = vcpu->arch.regs.xer;
212 svcpu->ctr = vcpu->arch.regs.ctr;
213 svcpu->lr = vcpu->arch.regs.link;
214 svcpu->pc = vcpu->arch.regs.nip;
216 svcpu->shadow_fscr = vcpu->arch.shadow_fscr;
222 vcpu->arch.entry_tb = get_tb();
223 vcpu->arch.entry_vtb = get_vtb();
225 vcpu->arch.entry_ic = mfspr(SPRN_IC);
246 smsr |= (guest_msr & vcpu->arch.guest_owned_ext);
260 vcpu->arch.shadow_msr = smsr;
278 vcpu->arch.regs.gpr[0] = svcpu->gpr[0];
279 vcpu->arch.regs.gpr[1] = svcpu->gpr[1];
280 vcpu->arch.regs.gpr[2] = svcpu->gpr[2];
281 vcpu->arch.regs.gpr[3] = svcpu->gpr[3];
282 vcpu->arch.regs.gpr[4] = svcpu->gpr[4];
283 vcpu->arch.regs.gpr[5] = svcpu->gpr[5];
284 vcpu->arch.regs.gpr[6] = svcpu->gpr[6];
285 vcpu->arch.regs.gpr[7] = svcpu->gpr[7];
286 vcpu->arch.regs.gpr[8] = svcpu->gpr[8];
287 vcpu->arch.regs.gpr[9] = svcpu->gpr[9];
288 vcpu->arch.regs.gpr[10] = svcpu->gpr[10];
289 vcpu->arch.regs.gpr[11] = svcpu->gpr[11];
290 vcpu->arch.regs.gpr[12] = svcpu->gpr[12];
291 vcpu->arch.regs.gpr[13] = svcpu->gpr[13];
292 vcpu->arch.regs.ccr = svcpu->cr;
293 vcpu->arch.regs.xer = svcpu->xer;
294 vcpu->arch.regs.ctr = svcpu->ctr;
295 vcpu->arch.regs.link = svcpu->lr;
296 vcpu->arch.regs.nip = svcpu->pc;
297 vcpu->arch.shadow_srr1 = svcpu->shadow_srr1;
298 vcpu->arch.fault_dar = svcpu->fault_dar;
299 vcpu->arch.fault_dsisr = svcpu->fault_dsisr;
300 vcpu->arch.last_inst = svcpu->last_inst;
302 vcpu->arch.shadow_fscr = svcpu->shadow_fscr;
307 vcpu->arch.purr += get_tb() - vcpu->arch.entry_tb;
308 vcpu->arch.spurr += get_tb() - vcpu->arch.entry_tb;
309 to_book3s(vcpu)->vtb += get_vtb() - vcpu->arch.entry_vtb;
311 vcpu->arch.ic += mfspr(SPRN_IC) - vcpu->arch.entry_ic;
327 (vcpu->arch.shadow_srr1 & (MSR_TS_MASK)) !=
330 old_msr |= (vcpu->arch.shadow_srr1 & (MSR_TS_MASK));
346 vcpu->arch.tfhar = mfspr(SPRN_TFHAR);
347 vcpu->arch.texasr = mfspr(SPRN_TEXASR);
348 vcpu->arch.tfiar = mfspr(SPRN_TFIAR);
355 mtspr(SPRN_TFHAR, vcpu->arch.tfhar);
356 mtspr(SPRN_TEXASR, vcpu->arch.texasr);
357 mtspr(SPRN_TFIAR, vcpu->arch.tfiar);
367 ulong ext_diff = (kvmppc_get_msr(vcpu) & ~vcpu->arch.guest_owned_ext) &
404 if (vcpu->arch.fscr & FSCR_TAR)
416 if (vcpu->arch.fscr & FSCR_TAR)
477 if (vcpu->arch.papr_enabled)
500 if (!vcpu->arch.pending_exceptions) {
521 if (!(msr & MSR_PR) && vcpu->arch.magic_page_pa) {
522 struct kvm_vcpu_arch *a = &vcpu->arch;
539 if (vcpu->arch.magic_page_pa &&
542 kvmppc_mmu_pte_flush(vcpu, (uint32_t)vcpu->arch.magic_page_pa,
560 vcpu->arch.hflags &= ~BOOK3S_HFLAG_SLB;
561 vcpu->arch.pvr = pvr;
568 vcpu->arch.cpu_type = KVM_CPU_3S_64;
576 vcpu->arch.cpu_type = KVM_CPU_3S_32;
583 vcpu->arch.hflags &= ~BOOK3S_HFLAG_DCBZ32;
584 if (vcpu->arch.mmu.is_dcbz32(vcpu) && (mfmsr() & MSR_HV) &&
586 vcpu->arch.hflags |= BOOK3S_HFLAG_DCBZ32;
608 vcpu->arch.hflags |= BOOK3S_HFLAG_MULTI_PGSIZE |
615 vcpu->arch.hflags |= BOOK3S_HFLAG_DCBZ32;
630 vcpu->arch.hflags |= BOOK3S_HFLAG_NATIVE_PS;
674 ulong mp_pa = vcpu->arch.magic_page_pa;
701 if (data && (vcpu->arch.fault_dsisr & DSISR_ISSTORE))
706 page_found = vcpu->arch.mmu.xlate(vcpu, eaddr, &pte, data, iswrite);
724 (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK) &&
729 vcpu->arch.mmu.esid_to_vsid(vcpu, eaddr >> SID_SHIFT, &vsid);
742 if (vcpu->arch.mmu.is_dcbz32(vcpu) &&
743 (!(vcpu->arch.hflags & BOOK3S_HFLAG_DCBZ32))) {
761 flags |= vcpu->arch.fault_dsisr & DSISR_ISSTORE;
771 if (data && !(vcpu->arch.fault_dsisr & DSISR_NOHPTE)) {
787 else if (vcpu->arch.mmu.is_dcbz32(vcpu) &&
788 (!(vcpu->arch.hflags & BOOK3S_HFLAG_DCBZ32)))
793 vcpu->arch.paddr_accessed = pte.raddr;
794 vcpu->arch.vaddr_accessed = pte.eaddr;
815 msr &= vcpu->arch.guest_owned_ext;
842 vcpu->arch.guest_owned_ext &= ~(msr | MSR_VSX);
850 if (!(vcpu->arch.shadow_fscr & (1ULL << fac))) {
857 vcpu->arch.tar = mfspr(SPRN_TAR);
859 vcpu->arch.shadow_fscr &= ~FSCR_TAR;
872 if (vcpu->arch.hflags & BOOK3S_HFLAG_PAIRED_SINGLE)
898 msr &= ~vcpu->arch.guest_owned_ext;
909 load_fp_state(&vcpu->arch.fp);
911 t->fp_save_area = &vcpu->arch.fp;
919 load_vr_state(&vcpu->arch.vr);
921 t->vr_save_area = &vcpu->arch.vr;
927 vcpu->arch.guest_owned_ext |= msr;
941 lost_ext = vcpu->arch.guest_owned_ext & ~current->thread.regs->msr;
948 load_fp_state(&vcpu->arch.fp);
956 load_vr_state(&vcpu->arch.vr);
969 vcpu->arch.fscr &= ~(0xffULL << 56);
970 vcpu->arch.fscr |= (fac << 56);
1000 guest_fac_enabled = (vcpu->arch.fscr & (1ULL << fac));
1020 mtspr(SPRN_TAR, vcpu->arch.tar);
1021 vcpu->arch.shadow_fscr |= FSCR_TAR;
1049 if ((vcpu->arch.fscr & FSCR_TAR) && !(fscr & FSCR_TAR)) {
1052 } else if (!(vcpu->arch.fscr & FSCR_TAR) && (fscr & FSCR_TAR)) {
1053 vcpu->arch.fscr = fscr;
1058 vcpu->arch.fscr = fscr;
1094 flags = vcpu->arch.shadow_srr1 & 0x1f0000ull;
1161 ulong shadow_srr1 = vcpu->arch.shadow_srr1;
1191 } else if (vcpu->arch.mmu.is_dcbz32(vcpu) &&
1192 (!(vcpu->arch.hflags & BOOK3S_HFLAG_DCBZ32))) {
1210 u32 fault_dsisr = vcpu->arch.fault_dsisr;
1290 if (vcpu->arch.papr_enabled) {
1300 if (vcpu->arch.papr_enabled &&
1320 vcpu->arch.hcall_needed = 1;
1322 } else if (vcpu->arch.osi_enabled &&
1332 vcpu->arch.osi_needed = 1;
1355 if (vcpu->arch.hflags & BOOK3S_HFLAG_PAIRED_SINGLE) {
1407 r = kvmppc_handle_fac(vcpu, vcpu->arch.shadow_fscr >> 56);
1425 ulong shadow_srr1 = vcpu->arch.shadow_srr1;
1468 sregs->pvr = vcpu->arch.pvr;
1471 if (vcpu->arch.hflags & BOOK3S_HFLAG_SLB) {
1473 sregs->u.s.ppc64.slb[i].slbe = vcpu->arch.slb[i].orige | i;
1474 sregs->u.s.ppc64.slb[i].slbv = vcpu->arch.slb[i].origv;
1499 if (vcpu->arch.hflags & BOOK3S_HFLAG_SLB) {
1501 vcpu->arch.mmu.slbmte(vcpu, 0, 0);
1502 vcpu->arch.mmu.slbia(vcpu);
1509 vcpu->arch.mmu.slbmte(vcpu, rs, rb);
1515 vcpu->arch.mmu.mtsrin(vcpu, i, sregs->u.s.ppc32.sr[i]);
1555 if (vcpu->arch.intr_msr & MSR_LE)
1562 *val = get_reg_val(id, vcpu->arch.tfhar);
1565 *val = get_reg_val(id, vcpu->arch.tfiar);
1568 *val = get_reg_val(id, vcpu->arch.texasr);
1572 vcpu->arch.gpr_tm[id-KVM_REG_PPC_TM_GPR0]);
1581 val->vsxval[j] = vcpu->arch.fp_tm.fpr[i][j];
1584 val->vval = vcpu->arch.vr_tm.vr[i-32];
1591 *val = get_reg_val(id, vcpu->arch.cr_tm);
1594 *val = get_reg_val(id, vcpu->arch.xer_tm);
1597 *val = get_reg_val(id, vcpu->arch.lr_tm);
1600 *val = get_reg_val(id, vcpu->arch.ctr_tm);
1603 *val = get_reg_val(id, vcpu->arch.fp_tm.fpscr);
1606 *val = get_reg_val(id, vcpu->arch.amr_tm);
1609 *val = get_reg_val(id, vcpu->arch.ppr_tm);
1612 *val = get_reg_val(id, vcpu->arch.vrsave_tm);
1616 *val = get_reg_val(id, vcpu->arch.vr_tm.vscr.u[3]);
1621 *val = get_reg_val(id, vcpu->arch.dscr_tm);
1624 *val = get_reg_val(id, vcpu->arch.tar_tm);
1638 vcpu->arch.intr_msr |= MSR_LE;
1640 vcpu->arch.intr_msr &= ~MSR_LE;
1662 vcpu->arch.tfhar = set_reg_val(id, *val);
1665 vcpu->arch.tfiar = set_reg_val(id, *val);
1668 vcpu->arch.texasr = set_reg_val(id, *val);
1671 vcpu->arch.gpr_tm[id - KVM_REG_PPC_TM_GPR0] =
1681 vcpu->arch.fp_tm.fpr[i][j] = val->vsxval[j];
1684 vcpu->arch.vr_tm.vr[i-32] = val->vval;
1690 vcpu->arch.cr_tm = set_reg_val(id, *val);
1693 vcpu->arch.xer_tm = set_reg_val(id, *val);
1696 vcpu->arch.lr_tm = set_reg_val(id, *val);
1699 vcpu->arch.ctr_tm = set_reg_val(id, *val);
1702 vcpu->arch.fp_tm.fpscr = set_reg_val(id, *val);
1705 vcpu->arch.amr_tm = set_reg_val(id, *val);
1708 vcpu->arch.ppr_tm = set_reg_val(id, *val);
1711 vcpu->arch.vrsave_tm = set_reg_val(id, *val);
1715 vcpu->arch.vr.vscr.u[3] = set_reg_val(id, *val);
1720 vcpu->arch.dscr_tm = set_reg_val(id, *val);
1723 vcpu->arch.tar_tm = set_reg_val(id, *val);
1745 vcpu->arch.book3s = vcpu_book3s;
1748 vcpu->arch.shadow_vcpu =
1749 kzalloc(sizeof(*vcpu->arch.shadow_vcpu), GFP_KERNEL);
1750 if (!vcpu->arch.shadow_vcpu)
1757 vcpu->arch.shared = (void *)p;
1761 vcpu->arch.shared_big_endian = true;
1763 vcpu->arch.shared_big_endian = false;
1771 vcpu->arch.pvr = 0x3C0301;
1773 vcpu->arch.pvr = mfspr(SPRN_PVR);
1774 vcpu->arch.intr_msr = MSR_SF;
1777 vcpu->arch.pvr = 0x84202;
1778 vcpu->arch.intr_msr = 0;
1780 kvmppc_set_pvr_pr(vcpu, vcpu->arch.pvr);
1781 vcpu->arch.slb_nr = 64;
1783 vcpu->arch.shadow_msr = MSR_USER64 & ~MSR_LE;
1792 free_page((unsigned long)vcpu->arch.shared);
1795 kfree(vcpu->arch.shadow_vcpu);
1808 free_page((unsigned long)vcpu->arch.shared & PAGE_MASK);
1810 kfree(vcpu->arch.shadow_vcpu);
1820 if (!vcpu->arch.sane) {
1960 if (vcpu && (vcpu->arch.hflags & BOOK3S_HFLAG_MULTI_PGSIZE)) {
2003 mutex_init(&kvm->arch.hpt_mutex);
2022 WARN_ON(!list_empty(&kvm->arch.spapr_tce_tables));