Lines Matching defs:vcpu
27 void kvmppc_set_pending_interrupt(struct kvm_vcpu *vcpu, enum int_class type)
48 tag = PPC_DBELL_LPID(get_lpid(vcpu)) | vcpu->vcpu_id;
73 mtspr(SPRN_MAS5, MAS5_SGS | get_lpid(&vcpu_e500->vcpu));
94 mtspr(SPRN_MAS5, MAS5_SGS | get_lpid(&vcpu_e500->vcpu));
100 void kvmppc_set_pid(struct kvm_vcpu *vcpu, u32 pid)
102 vcpu->arch.pid = pid;
105 void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr)
112 static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu)
114 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
116 kvmppc_booke_vcpu_load(vcpu, cpu);
118 mtspr(SPRN_LPID, get_lpid(vcpu));
119 mtspr(SPRN_EPCR, vcpu->arch.shadow_epcr);
120 mtspr(SPRN_GPIR, vcpu->vcpu_id);
121 mtspr(SPRN_MSRP, vcpu->arch.shadow_msrp);
122 vcpu->arch.eplc = EPC_EGS | (get_lpid(vcpu) << EPC_ELPID_SHIFT);
123 vcpu->arch.epsc = vcpu->arch.eplc;
124 mtspr(SPRN_EPLC, vcpu->arch.eplc);
125 mtspr(SPRN_EPSC, vcpu->arch.epsc);
127 mtspr(SPRN_GIVPR, vcpu->arch.ivpr);
128 mtspr(SPRN_GIVOR2, vcpu->arch.ivor[BOOKE_IRQPRIO_DATA_STORAGE]);
129 mtspr(SPRN_GIVOR8, vcpu->arch.ivor[BOOKE_IRQPRIO_SYSCALL]);
130 mtspr(SPRN_GSPRG0, (unsigned long)vcpu->arch.shared->sprg0);
131 mtspr(SPRN_GSPRG1, (unsigned long)vcpu->arch.shared->sprg1);
132 mtspr(SPRN_GSPRG2, (unsigned long)vcpu->arch.shared->sprg2);
133 mtspr(SPRN_GSPRG3, (unsigned long)vcpu->arch.shared->sprg3);
135 mtspr(SPRN_GSRR0, vcpu->arch.shared->srr0);
136 mtspr(SPRN_GSRR1, vcpu->arch.shared->srr1);
138 mtspr(SPRN_GEPR, vcpu->arch.epr);
139 mtspr(SPRN_GDEAR, vcpu->arch.shared->dar);
140 mtspr(SPRN_GESR, vcpu->arch.shared->esr);
142 if (vcpu->arch.oldpir != mfspr(SPRN_PIR) ||
143 __this_cpu_read(last_vcpu_of_lpid[get_lpid(vcpu)]) != vcpu) {
145 __this_cpu_write(last_vcpu_of_lpid[get_lpid(vcpu)], vcpu);
149 static void kvmppc_core_vcpu_put_e500mc(struct kvm_vcpu *vcpu)
151 vcpu->arch.eplc = mfspr(SPRN_EPLC);
152 vcpu->arch.epsc = mfspr(SPRN_EPSC);
154 vcpu->arch.shared->sprg0 = mfspr(SPRN_GSPRG0);
155 vcpu->arch.shared->sprg1 = mfspr(SPRN_GSPRG1);
156 vcpu->arch.shared->sprg2 = mfspr(SPRN_GSPRG2);
157 vcpu->arch.shared->sprg3 = mfspr(SPRN_GSPRG3);
159 vcpu->arch.shared->srr0 = mfspr(SPRN_GSRR0);
160 vcpu->arch.shared->srr1 = mfspr(SPRN_GSRR1);
162 vcpu->arch.epr = mfspr(SPRN_GEPR);
163 vcpu->arch.shared->dar = mfspr(SPRN_GDEAR);
164 vcpu->arch.shared->esr = mfspr(SPRN_GESR);
166 vcpu->arch.oldpir = mfspr(SPRN_PIR);
168 kvmppc_booke_vcpu_put(vcpu);
195 int kvmppc_core_vcpu_setup(struct kvm_vcpu *vcpu)
197 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
199 vcpu->arch.shadow_epcr = SPRN_EPCR_DSIGS | SPRN_EPCR_DGTMI | \
202 vcpu->arch.shadow_epcr |= SPRN_EPCR_ICM;
204 vcpu->arch.shadow_msrp = MSRP_UCLEP | MSRP_PMMP;
206 vcpu->arch.pvr = mfspr(SPRN_PVR);
209 vcpu->arch.cpu_type = KVM_CPU_E500MC;
214 static int kvmppc_core_get_sregs_e500mc(struct kvm_vcpu *vcpu,
217 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
228 kvmppc_get_sregs_e500_tlb(vcpu, sregs);
231 vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR];
232 sregs->u.e.ivor_high[4] = vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL];
233 sregs->u.e.ivor_high[5] = vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL_CRIT];
235 return kvmppc_get_sregs_ivor(vcpu, sregs);
238 static int kvmppc_core_set_sregs_e500mc(struct kvm_vcpu *vcpu,
241 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
250 ret = kvmppc_set_sregs_e500_tlb(vcpu, sregs);
258 vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR] =
263 vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL] =
265 vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL_CRIT] =
269 return kvmppc_set_sregs_ivor(vcpu, sregs);
272 static int kvmppc_get_one_reg_e500mc(struct kvm_vcpu *vcpu, u64 id,
279 *val = get_reg_val(id, vcpu->arch.sprg9);
282 r = kvmppc_get_one_reg_e500_tlb(vcpu, id, val);
288 static int kvmppc_set_one_reg_e500mc(struct kvm_vcpu *vcpu, u64 id,
295 vcpu->arch.sprg9 = set_reg_val(id, *val);
298 r = kvmppc_set_one_reg_e500_tlb(vcpu, id, val);
304 static int kvmppc_core_vcpu_create_e500mc(struct kvm_vcpu *vcpu)
309 BUILD_BUG_ON(offsetof(struct kvmppc_vcpu_e500, vcpu) != 0);
310 vcpu_e500 = to_e500(vcpu);
313 vcpu->arch.oldpir = 0xffffffff;
319 vcpu->arch.shared = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
320 if (!vcpu->arch.shared) {
332 static void kvmppc_core_vcpu_free_e500mc(struct kvm_vcpu *vcpu)
334 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
336 free_page((unsigned long)vcpu->arch.shared);
350 * even numbers to speedup vcpu lpid computation with consecutive lpids