Lines Matching refs:vcpu
31 void kvmppc_set_pending_interrupt(struct kvm_vcpu *vcpu, enum int_class type) in kvmppc_set_pending_interrupt() argument
52 tag = PPC_DBELL_LPID(get_lpid(vcpu)) | vcpu->vcpu_id; in kvmppc_set_pending_interrupt()
77 mtspr(SPRN_MAS5, MAS5_SGS | get_lpid(&vcpu_e500->vcpu)); in kvmppc_e500_tlbil_one()
98 mtspr(SPRN_MAS5, MAS5_SGS | get_lpid(&vcpu_e500->vcpu)); in kvmppc_e500_tlbil_all()
104 void kvmppc_set_pid(struct kvm_vcpu *vcpu, u32 pid) in kvmppc_set_pid() argument
106 vcpu->arch.pid = pid; in kvmppc_set_pid()
109 void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr) in kvmppc_mmu_msr_notify() argument
116 static void kvmppc_core_vcpu_load_e500mc(struct kvm_vcpu *vcpu, int cpu) in kvmppc_core_vcpu_load_e500mc() argument
118 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); in kvmppc_core_vcpu_load_e500mc()
120 kvmppc_booke_vcpu_load(vcpu, cpu); in kvmppc_core_vcpu_load_e500mc()
122 mtspr(SPRN_LPID, get_lpid(vcpu)); in kvmppc_core_vcpu_load_e500mc()
123 mtspr(SPRN_EPCR, vcpu->arch.shadow_epcr); in kvmppc_core_vcpu_load_e500mc()
124 mtspr(SPRN_GPIR, vcpu->vcpu_id); in kvmppc_core_vcpu_load_e500mc()
125 mtspr(SPRN_MSRP, vcpu->arch.shadow_msrp); in kvmppc_core_vcpu_load_e500mc()
126 vcpu->arch.eplc = EPC_EGS | (get_lpid(vcpu) << EPC_ELPID_SHIFT); in kvmppc_core_vcpu_load_e500mc()
127 vcpu->arch.epsc = vcpu->arch.eplc; in kvmppc_core_vcpu_load_e500mc()
128 mtspr(SPRN_EPLC, vcpu->arch.eplc); in kvmppc_core_vcpu_load_e500mc()
129 mtspr(SPRN_EPSC, vcpu->arch.epsc); in kvmppc_core_vcpu_load_e500mc()
131 mtspr(SPRN_GIVPR, vcpu->arch.ivpr); in kvmppc_core_vcpu_load_e500mc()
132 mtspr(SPRN_GIVOR2, vcpu->arch.ivor[BOOKE_IRQPRIO_DATA_STORAGE]); in kvmppc_core_vcpu_load_e500mc()
133 mtspr(SPRN_GIVOR8, vcpu->arch.ivor[BOOKE_IRQPRIO_SYSCALL]); in kvmppc_core_vcpu_load_e500mc()
134 mtspr(SPRN_GSPRG0, (unsigned long)vcpu->arch.shared->sprg0); in kvmppc_core_vcpu_load_e500mc()
135 mtspr(SPRN_GSPRG1, (unsigned long)vcpu->arch.shared->sprg1); in kvmppc_core_vcpu_load_e500mc()
136 mtspr(SPRN_GSPRG2, (unsigned long)vcpu->arch.shared->sprg2); in kvmppc_core_vcpu_load_e500mc()
137 mtspr(SPRN_GSPRG3, (unsigned long)vcpu->arch.shared->sprg3); in kvmppc_core_vcpu_load_e500mc()
139 mtspr(SPRN_GSRR0, vcpu->arch.shared->srr0); in kvmppc_core_vcpu_load_e500mc()
140 mtspr(SPRN_GSRR1, vcpu->arch.shared->srr1); in kvmppc_core_vcpu_load_e500mc()
142 mtspr(SPRN_GEPR, vcpu->arch.epr); in kvmppc_core_vcpu_load_e500mc()
143 mtspr(SPRN_GDEAR, vcpu->arch.shared->dar); in kvmppc_core_vcpu_load_e500mc()
144 mtspr(SPRN_GESR, vcpu->arch.shared->esr); in kvmppc_core_vcpu_load_e500mc()
146 if (vcpu->arch.oldpir != mfspr(SPRN_PIR) || in kvmppc_core_vcpu_load_e500mc()
147 __this_cpu_read(last_vcpu_of_lpid[get_lpid(vcpu)]) != vcpu) { in kvmppc_core_vcpu_load_e500mc()
149 __this_cpu_write(last_vcpu_of_lpid[get_lpid(vcpu)], vcpu); in kvmppc_core_vcpu_load_e500mc()
153 static void kvmppc_core_vcpu_put_e500mc(struct kvm_vcpu *vcpu) in kvmppc_core_vcpu_put_e500mc() argument
155 vcpu->arch.eplc = mfspr(SPRN_EPLC); in kvmppc_core_vcpu_put_e500mc()
156 vcpu->arch.epsc = mfspr(SPRN_EPSC); in kvmppc_core_vcpu_put_e500mc()
158 vcpu->arch.shared->sprg0 = mfspr(SPRN_GSPRG0); in kvmppc_core_vcpu_put_e500mc()
159 vcpu->arch.shared->sprg1 = mfspr(SPRN_GSPRG1); in kvmppc_core_vcpu_put_e500mc()
160 vcpu->arch.shared->sprg2 = mfspr(SPRN_GSPRG2); in kvmppc_core_vcpu_put_e500mc()
161 vcpu->arch.shared->sprg3 = mfspr(SPRN_GSPRG3); in kvmppc_core_vcpu_put_e500mc()
163 vcpu->arch.shared->srr0 = mfspr(SPRN_GSRR0); in kvmppc_core_vcpu_put_e500mc()
164 vcpu->arch.shared->srr1 = mfspr(SPRN_GSRR1); in kvmppc_core_vcpu_put_e500mc()
166 vcpu->arch.epr = mfspr(SPRN_GEPR); in kvmppc_core_vcpu_put_e500mc()
167 vcpu->arch.shared->dar = mfspr(SPRN_GDEAR); in kvmppc_core_vcpu_put_e500mc()
168 vcpu->arch.shared->esr = mfspr(SPRN_GESR); in kvmppc_core_vcpu_put_e500mc()
170 vcpu->arch.oldpir = mfspr(SPRN_PIR); in kvmppc_core_vcpu_put_e500mc()
172 kvmppc_booke_vcpu_put(vcpu); in kvmppc_core_vcpu_put_e500mc()
199 int kvmppc_core_vcpu_setup(struct kvm_vcpu *vcpu) in kvmppc_core_vcpu_setup() argument
201 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); in kvmppc_core_vcpu_setup()
203 vcpu->arch.shadow_epcr = SPRN_EPCR_DSIGS | SPRN_EPCR_DGTMI | \ in kvmppc_core_vcpu_setup()
206 vcpu->arch.shadow_epcr |= SPRN_EPCR_ICM; in kvmppc_core_vcpu_setup()
208 vcpu->arch.shadow_msrp = MSRP_UCLEP | MSRP_PMMP; in kvmppc_core_vcpu_setup()
210 vcpu->arch.pvr = mfspr(SPRN_PVR); in kvmppc_core_vcpu_setup()
213 vcpu->arch.cpu_type = KVM_CPU_E500MC; in kvmppc_core_vcpu_setup()
218 static int kvmppc_core_get_sregs_e500mc(struct kvm_vcpu *vcpu, in kvmppc_core_get_sregs_e500mc() argument
221 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); in kvmppc_core_get_sregs_e500mc()
232 kvmppc_get_sregs_e500_tlb(vcpu, sregs); in kvmppc_core_get_sregs_e500mc()
235 vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR]; in kvmppc_core_get_sregs_e500mc()
236 sregs->u.e.ivor_high[4] = vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL]; in kvmppc_core_get_sregs_e500mc()
237 sregs->u.e.ivor_high[5] = vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL_CRIT]; in kvmppc_core_get_sregs_e500mc()
239 return kvmppc_get_sregs_ivor(vcpu, sregs); in kvmppc_core_get_sregs_e500mc()
242 static int kvmppc_core_set_sregs_e500mc(struct kvm_vcpu *vcpu, in kvmppc_core_set_sregs_e500mc() argument
245 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); in kvmppc_core_set_sregs_e500mc()
254 ret = kvmppc_set_sregs_e500_tlb(vcpu, sregs); in kvmppc_core_set_sregs_e500mc()
262 vcpu->arch.ivor[BOOKE_IRQPRIO_PERFORMANCE_MONITOR] = in kvmppc_core_set_sregs_e500mc()
267 vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL] = in kvmppc_core_set_sregs_e500mc()
269 vcpu->arch.ivor[BOOKE_IRQPRIO_DBELL_CRIT] = in kvmppc_core_set_sregs_e500mc()
273 return kvmppc_set_sregs_ivor(vcpu, sregs); in kvmppc_core_set_sregs_e500mc()
276 static int kvmppc_get_one_reg_e500mc(struct kvm_vcpu *vcpu, u64 id, in kvmppc_get_one_reg_e500mc() argument
283 *val = get_reg_val(id, vcpu->arch.sprg9); in kvmppc_get_one_reg_e500mc()
286 r = kvmppc_get_one_reg_e500_tlb(vcpu, id, val); in kvmppc_get_one_reg_e500mc()
292 static int kvmppc_set_one_reg_e500mc(struct kvm_vcpu *vcpu, u64 id, in kvmppc_set_one_reg_e500mc() argument
299 vcpu->arch.sprg9 = set_reg_val(id, *val); in kvmppc_set_one_reg_e500mc()
302 r = kvmppc_set_one_reg_e500_tlb(vcpu, id, val); in kvmppc_set_one_reg_e500mc()
312 struct kvm_vcpu *vcpu; in kvmppc_core_vcpu_create_e500mc() local
320 vcpu = &vcpu_e500->vcpu; in kvmppc_core_vcpu_create_e500mc()
323 vcpu->arch.oldpir = 0xffffffff; in kvmppc_core_vcpu_create_e500mc()
325 err = kvm_vcpu_init(vcpu, kvm, id); in kvmppc_core_vcpu_create_e500mc()
333 vcpu->arch.shared = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); in kvmppc_core_vcpu_create_e500mc()
334 if (!vcpu->arch.shared) in kvmppc_core_vcpu_create_e500mc()
337 return vcpu; in kvmppc_core_vcpu_create_e500mc()
342 kvm_vcpu_uninit(vcpu); in kvmppc_core_vcpu_create_e500mc()
350 static void kvmppc_core_vcpu_free_e500mc(struct kvm_vcpu *vcpu) in kvmppc_core_vcpu_free_e500mc() argument
352 struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu); in kvmppc_core_vcpu_free_e500mc()
354 free_page((unsigned long)vcpu->arch.shared); in kvmppc_core_vcpu_free_e500mc()
356 kvm_vcpu_uninit(vcpu); in kvmppc_core_vcpu_free_e500mc()