Lines Matching refs:vcpu
23 static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu, in __sigp_sense() argument
46 VCPU_EVENT(vcpu, 4, "sensed status of cpu %x rc %x", dst_vcpu->vcpu_id, in __sigp_sense()
51 static int __inject_sigp_emergency(struct kvm_vcpu *vcpu, in __inject_sigp_emergency() argument
56 .u.emerg.code = vcpu->vcpu_id, in __inject_sigp_emergency()
62 VCPU_EVENT(vcpu, 4, "sent sigp emerg to cpu %x", in __inject_sigp_emergency()
68 static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu) in __sigp_emergency() argument
70 return __inject_sigp_emergency(vcpu, dst_vcpu); in __sigp_emergency()
73 static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu, in __sigp_conditional_emergency() argument
92 return __inject_sigp_emergency(vcpu, dst_vcpu); in __sigp_conditional_emergency()
100 static int __sigp_external_call(struct kvm_vcpu *vcpu, in __sigp_external_call() argument
105 .u.extcall.code = vcpu->vcpu_id, in __sigp_external_call()
115 VCPU_EVENT(vcpu, 4, "sent sigp ext call to cpu %x", in __sigp_external_call()
122 static int __sigp_stop(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu) in __sigp_stop() argument
133 VCPU_EVENT(vcpu, 4, "sent sigp stop to cpu %x", in __sigp_stop()
139 static int __sigp_stop_and_store_status(struct kvm_vcpu *vcpu, in __sigp_stop_and_store_status() argument
152 VCPU_EVENT(vcpu, 4, "sent sigp stop and store status to cpu %x", in __sigp_stop_and_store_status()
158 static int __sigp_set_arch(struct kvm_vcpu *vcpu, u32 parameter) in __sigp_set_arch() argument
170 kvm_for_each_vcpu(i, v, vcpu->kvm) { in __sigp_set_arch()
183 static int __sigp_set_prefix(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu, in __sigp_set_prefix() argument
197 if (kvm_is_error_gpa(vcpu->kvm, irq.u.prefix.address)) { in __sigp_set_prefix()
213 static int __sigp_store_status_at_addr(struct kvm_vcpu *vcpu, in __sigp_store_status_at_addr() argument
237 static int __sigp_sense_running(struct kvm_vcpu *vcpu, in __sigp_sense_running() argument
254 VCPU_EVENT(vcpu, 4, "sensed running status of cpu %x rc %x", in __sigp_sense_running()
260 static int __prepare_sigp_re_start(struct kvm_vcpu *vcpu, in __prepare_sigp_re_start() argument
276 static int __prepare_sigp_cpu_reset(struct kvm_vcpu *vcpu, in __prepare_sigp_cpu_reset() argument
283 static int __prepare_sigp_unknown(struct kvm_vcpu *vcpu, in __prepare_sigp_unknown() argument
290 static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, in handle_sigp_dst() argument
294 struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr); in handle_sigp_dst()
301 vcpu->stat.instruction_sigp_sense++; in handle_sigp_dst()
302 rc = __sigp_sense(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
305 vcpu->stat.instruction_sigp_external_call++; in handle_sigp_dst()
306 rc = __sigp_external_call(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
309 vcpu->stat.instruction_sigp_emergency++; in handle_sigp_dst()
310 rc = __sigp_emergency(vcpu, dst_vcpu); in handle_sigp_dst()
313 vcpu->stat.instruction_sigp_stop++; in handle_sigp_dst()
314 rc = __sigp_stop(vcpu, dst_vcpu); in handle_sigp_dst()
317 vcpu->stat.instruction_sigp_stop_store_status++; in handle_sigp_dst()
318 rc = __sigp_stop_and_store_status(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
321 vcpu->stat.instruction_sigp_store_status++; in handle_sigp_dst()
322 rc = __sigp_store_status_at_addr(vcpu, dst_vcpu, parameter, in handle_sigp_dst()
326 vcpu->stat.instruction_sigp_prefix++; in handle_sigp_dst()
327 rc = __sigp_set_prefix(vcpu, dst_vcpu, parameter, status_reg); in handle_sigp_dst()
330 vcpu->stat.instruction_sigp_cond_emergency++; in handle_sigp_dst()
331 rc = __sigp_conditional_emergency(vcpu, dst_vcpu, parameter, in handle_sigp_dst()
335 vcpu->stat.instruction_sigp_sense_running++; in handle_sigp_dst()
336 rc = __sigp_sense_running(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
339 vcpu->stat.instruction_sigp_start++; in handle_sigp_dst()
340 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
343 vcpu->stat.instruction_sigp_restart++; in handle_sigp_dst()
344 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
347 vcpu->stat.instruction_sigp_init_cpu_reset++; in handle_sigp_dst()
348 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
351 vcpu->stat.instruction_sigp_cpu_reset++; in handle_sigp_dst()
352 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
355 vcpu->stat.instruction_sigp_unknown++; in handle_sigp_dst()
356 rc = __prepare_sigp_unknown(vcpu, dst_vcpu); in handle_sigp_dst()
360 VCPU_EVENT(vcpu, 4, in handle_sigp_dst()
367 static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code, in handle_sigp_order_in_user_space() argument
370 if (!vcpu->kvm->arch.user_sigp) in handle_sigp_order_in_user_space()
382 vcpu->stat.instruction_sigp_stop++; in handle_sigp_order_in_user_space()
385 vcpu->stat.instruction_sigp_stop_store_status++; in handle_sigp_order_in_user_space()
388 vcpu->stat.instruction_sigp_store_status++; in handle_sigp_order_in_user_space()
391 vcpu->stat.instruction_sigp_store_adtl_status++; in handle_sigp_order_in_user_space()
394 vcpu->stat.instruction_sigp_prefix++; in handle_sigp_order_in_user_space()
397 vcpu->stat.instruction_sigp_start++; in handle_sigp_order_in_user_space()
400 vcpu->stat.instruction_sigp_restart++; in handle_sigp_order_in_user_space()
403 vcpu->stat.instruction_sigp_init_cpu_reset++; in handle_sigp_order_in_user_space()
406 vcpu->stat.instruction_sigp_cpu_reset++; in handle_sigp_order_in_user_space()
409 vcpu->stat.instruction_sigp_unknown++; in handle_sigp_order_in_user_space()
411 VCPU_EVENT(vcpu, 3, "SIGP: order %u for CPU %d handled in userspace", in handle_sigp_order_in_user_space()
417 int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu) in kvm_s390_handle_sigp() argument
419 int r1 = (vcpu->arch.sie_block->ipa & 0x00f0) >> 4; in kvm_s390_handle_sigp()
420 int r3 = vcpu->arch.sie_block->ipa & 0x000f; in kvm_s390_handle_sigp()
422 u16 cpu_addr = vcpu->run->s.regs.gprs[r3]; in kvm_s390_handle_sigp()
427 if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE) in kvm_s390_handle_sigp()
428 return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP); in kvm_s390_handle_sigp()
430 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL); in kvm_s390_handle_sigp()
431 if (handle_sigp_order_in_user_space(vcpu, order_code, cpu_addr)) in kvm_s390_handle_sigp()
435 parameter = vcpu->run->s.regs.gprs[r1]; in kvm_s390_handle_sigp()
437 parameter = vcpu->run->s.regs.gprs[r1 + 1]; in kvm_s390_handle_sigp()
439 trace_kvm_s390_handle_sigp(vcpu, order_code, cpu_addr, parameter); in kvm_s390_handle_sigp()
442 vcpu->stat.instruction_sigp_arch++; in kvm_s390_handle_sigp()
443 rc = __sigp_set_arch(vcpu, parameter); in kvm_s390_handle_sigp()
446 rc = handle_sigp_dst(vcpu, order_code, cpu_addr, in kvm_s390_handle_sigp()
448 &vcpu->run->s.regs.gprs[r1]); in kvm_s390_handle_sigp()
454 kvm_s390_set_psw_cc(vcpu, rc); in kvm_s390_handle_sigp()
467 int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu) in kvm_s390_handle_sigp_pei() argument
469 int r3 = vcpu->arch.sie_block->ipa & 0x000f; in kvm_s390_handle_sigp_pei()
470 u16 cpu_addr = vcpu->run->s.regs.gprs[r3]; in kvm_s390_handle_sigp_pei()
472 u8 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL); in kvm_s390_handle_sigp_pei()
474 trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr); in kvm_s390_handle_sigp_pei()
477 dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr); in kvm_s390_handle_sigp_pei()
481 kvm_s390_set_psw_cc(vcpu, SIGP_CC_ORDER_CODE_ACCEPTED); in kvm_s390_handle_sigp_pei()