Lines Matching refs:vcpu

28 static bool kvmppc_check_fp_disabled(struct kvm_vcpu *vcpu)  in kvmppc_check_fp_disabled()  argument
30 if (!(kvmppc_get_msr(vcpu) & MSR_FP)) { in kvmppc_check_fp_disabled()
31 kvmppc_core_queue_fpunavail(vcpu); in kvmppc_check_fp_disabled()
40 static bool kvmppc_check_vsx_disabled(struct kvm_vcpu *vcpu) in kvmppc_check_vsx_disabled() argument
42 if (!(kvmppc_get_msr(vcpu) & MSR_VSX)) { in kvmppc_check_vsx_disabled()
43 kvmppc_core_queue_vsx_unavail(vcpu); in kvmppc_check_vsx_disabled()
52 static bool kvmppc_check_altivec_disabled(struct kvm_vcpu *vcpu) in kvmppc_check_altivec_disabled() argument
54 if (!(kvmppc_get_msr(vcpu) & MSR_VEC)) { in kvmppc_check_altivec_disabled()
55 kvmppc_core_queue_vec_unavail(vcpu); in kvmppc_check_altivec_disabled()
72 int kvmppc_emulate_loadstore(struct kvm_vcpu *vcpu) in kvmppc_emulate_loadstore() argument
74 struct kvm_run *run = vcpu->run; in kvmppc_emulate_loadstore()
82 kvmppc_set_exit_type(vcpu, EMULATED_INST_EXITS); in kvmppc_emulate_loadstore()
84 emulated = kvmppc_get_last_inst(vcpu, INST_GENERIC, &inst); in kvmppc_emulate_loadstore()
92 vcpu->arch.mmio_vsx_copy_nums = 0; in kvmppc_emulate_loadstore()
93 vcpu->arch.mmio_vsx_offset = 0; in kvmppc_emulate_loadstore()
94 vcpu->arch.mmio_copy_type = KVMPPC_VSX_COPY_NONE; in kvmppc_emulate_loadstore()
95 vcpu->arch.mmio_sp64_extend = 0; in kvmppc_emulate_loadstore()
96 vcpu->arch.mmio_sign_extend = 0; in kvmppc_emulate_loadstore()
97 vcpu->arch.mmio_vmx_copy_nums = 0; in kvmppc_emulate_loadstore()
98 vcpu->arch.mmio_vmx_offset = 0; in kvmppc_emulate_loadstore()
99 vcpu->arch.mmio_host_swabbed = 0; in kvmppc_emulate_loadstore()
102 vcpu->arch.regs.msr = vcpu->arch.shared->msr; in kvmppc_emulate_loadstore()
103 if (analyse_instr(&op, &vcpu->arch.regs, inst) == 0) { in kvmppc_emulate_loadstore()
112 emulated = kvmppc_handle_loads(run, vcpu, in kvmppc_emulate_loadstore()
115 emulated = kvmppc_handle_load(run, vcpu, in kvmppc_emulate_loadstore()
119 kvmppc_set_gpr(vcpu, op.update_reg, op.ea); in kvmppc_emulate_loadstore()
125 if (kvmppc_check_fp_disabled(vcpu)) in kvmppc_emulate_loadstore()
129 vcpu->arch.mmio_sp64_extend = 1; in kvmppc_emulate_loadstore()
132 emulated = kvmppc_handle_loads(run, vcpu, in kvmppc_emulate_loadstore()
135 emulated = kvmppc_handle_load(run, vcpu, in kvmppc_emulate_loadstore()
139 kvmppc_set_gpr(vcpu, op.update_reg, op.ea); in kvmppc_emulate_loadstore()
145 if (kvmppc_check_altivec_disabled(vcpu)) in kvmppc_emulate_loadstore()
149 vcpu->arch.vaddr_accessed &= ~((unsigned long)size - 1); in kvmppc_emulate_loadstore()
150 vcpu->arch.paddr_accessed &= ~((unsigned long)size - 1); in kvmppc_emulate_loadstore()
153 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
156 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
159 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
162 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
167 vcpu->arch.mmio_vmx_offset = in kvmppc_emulate_loadstore()
168 (vcpu->arch.vaddr_accessed & 0xf)/size; in kvmppc_emulate_loadstore()
171 vcpu->arch.mmio_vmx_copy_nums = 2; in kvmppc_emulate_loadstore()
173 vcpu, KVM_MMIO_REG_VMX|op.reg, in kvmppc_emulate_loadstore()
176 vcpu->arch.mmio_vmx_copy_nums = 1; in kvmppc_emulate_loadstore()
177 emulated = kvmppc_handle_vmx_load(run, vcpu, in kvmppc_emulate_loadstore()
188 if (kvmppc_check_altivec_disabled(vcpu)) in kvmppc_emulate_loadstore()
191 if (kvmppc_check_vsx_disabled(vcpu)) in kvmppc_emulate_loadstore()
196 vcpu->arch.mmio_sp64_extend = 1; in kvmppc_emulate_loadstore()
200 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
203 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
207 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
210 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
217 vcpu->arch.mmio_vsx_copy_nums = 1; in kvmppc_emulate_loadstore()
220 vcpu->arch.mmio_vsx_copy_nums = in kvmppc_emulate_loadstore()
225 emulated = kvmppc_handle_vsx_load(run, vcpu, in kvmppc_emulate_loadstore()
235 emulated = kvmppc_handle_store(run, vcpu, op.val, in kvmppc_emulate_loadstore()
239 kvmppc_set_gpr(vcpu, op.update_reg, op.ea); in kvmppc_emulate_loadstore()
244 if (kvmppc_check_fp_disabled(vcpu)) in kvmppc_emulate_loadstore()
251 if (vcpu->kvm->arch.kvm_ops->giveup_ext) in kvmppc_emulate_loadstore()
252 vcpu->kvm->arch.kvm_ops->giveup_ext(vcpu, in kvmppc_emulate_loadstore()
256 vcpu->arch.mmio_sp64_extend = 1; in kvmppc_emulate_loadstore()
258 emulated = kvmppc_handle_store(run, vcpu, in kvmppc_emulate_loadstore()
259 VCPU_FPR(vcpu, op.reg), size, 1); in kvmppc_emulate_loadstore()
262 kvmppc_set_gpr(vcpu, op.update_reg, op.ea); in kvmppc_emulate_loadstore()
268 if (kvmppc_check_altivec_disabled(vcpu)) in kvmppc_emulate_loadstore()
272 vcpu->arch.vaddr_accessed &= ~((unsigned long)size - 1); in kvmppc_emulate_loadstore()
273 vcpu->arch.paddr_accessed &= ~((unsigned long)size - 1); in kvmppc_emulate_loadstore()
275 if (vcpu->kvm->arch.kvm_ops->giveup_ext) in kvmppc_emulate_loadstore()
276 vcpu->kvm->arch.kvm_ops->giveup_ext(vcpu, in kvmppc_emulate_loadstore()
279 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
282 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
285 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
288 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
293 vcpu->arch.mmio_vmx_offset = in kvmppc_emulate_loadstore()
294 (vcpu->arch.vaddr_accessed & 0xf)/size; in kvmppc_emulate_loadstore()
297 vcpu->arch.mmio_vmx_copy_nums = 2; in kvmppc_emulate_loadstore()
299 vcpu, op.reg, 8, 1); in kvmppc_emulate_loadstore()
301 vcpu->arch.mmio_vmx_copy_nums = 1; in kvmppc_emulate_loadstore()
303 vcpu, op.reg, size, 1); in kvmppc_emulate_loadstore()
313 if (kvmppc_check_altivec_disabled(vcpu)) in kvmppc_emulate_loadstore()
316 if (kvmppc_check_vsx_disabled(vcpu)) in kvmppc_emulate_loadstore()
320 if (vcpu->kvm->arch.kvm_ops->giveup_ext) in kvmppc_emulate_loadstore()
321 vcpu->kvm->arch.kvm_ops->giveup_ext(vcpu, in kvmppc_emulate_loadstore()
325 vcpu->arch.mmio_sp64_extend = 1; in kvmppc_emulate_loadstore()
328 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
331 vcpu->arch.mmio_copy_type = in kvmppc_emulate_loadstore()
338 vcpu->arch.mmio_vsx_copy_nums = 1; in kvmppc_emulate_loadstore()
341 vcpu->arch.mmio_vsx_copy_nums = in kvmppc_emulate_loadstore()
346 emulated = kvmppc_handle_vsx_store(run, vcpu, in kvmppc_emulate_loadstore()
367 kvmppc_core_queue_program(vcpu, 0); in kvmppc_emulate_loadstore()
370 trace_kvm_ppc_instr(inst, kvmppc_get_pc(vcpu), emulated); in kvmppc_emulate_loadstore()
374 kvmppc_set_pc(vcpu, kvmppc_get_pc(vcpu) + 4); in kvmppc_emulate_loadstore()