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()
209 VCPU_EVENT(vcpu, 4, "set prefix of cpu %02x to %x", in __sigp_set_prefix()
216 static int __sigp_store_status_at_addr(struct kvm_vcpu *vcpu, in __sigp_store_status_at_addr() argument
240 static int __sigp_sense_running(struct kvm_vcpu *vcpu, in __sigp_sense_running() argument
257 VCPU_EVENT(vcpu, 4, "sensed running status of cpu %x rc %x", in __sigp_sense_running()
263 static int __prepare_sigp_re_start(struct kvm_vcpu *vcpu, in __prepare_sigp_re_start() argument
279 static int __prepare_sigp_cpu_reset(struct kvm_vcpu *vcpu, in __prepare_sigp_cpu_reset() argument
286 static int __prepare_sigp_unknown(struct kvm_vcpu *vcpu, in __prepare_sigp_unknown() argument
293 static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, in handle_sigp_dst() argument
297 struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr); in handle_sigp_dst()
304 vcpu->stat.instruction_sigp_sense++; in handle_sigp_dst()
305 rc = __sigp_sense(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
308 vcpu->stat.instruction_sigp_external_call++; in handle_sigp_dst()
309 rc = __sigp_external_call(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
312 vcpu->stat.instruction_sigp_emergency++; in handle_sigp_dst()
313 rc = __sigp_emergency(vcpu, dst_vcpu); in handle_sigp_dst()
316 vcpu->stat.instruction_sigp_stop++; in handle_sigp_dst()
317 rc = __sigp_stop(vcpu, dst_vcpu); in handle_sigp_dst()
320 vcpu->stat.instruction_sigp_stop_store_status++; in handle_sigp_dst()
321 rc = __sigp_stop_and_store_status(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
324 vcpu->stat.instruction_sigp_store_status++; in handle_sigp_dst()
325 rc = __sigp_store_status_at_addr(vcpu, dst_vcpu, parameter, in handle_sigp_dst()
329 vcpu->stat.instruction_sigp_prefix++; in handle_sigp_dst()
330 rc = __sigp_set_prefix(vcpu, dst_vcpu, parameter, status_reg); in handle_sigp_dst()
333 vcpu->stat.instruction_sigp_cond_emergency++; in handle_sigp_dst()
334 rc = __sigp_conditional_emergency(vcpu, dst_vcpu, parameter, in handle_sigp_dst()
338 vcpu->stat.instruction_sigp_sense_running++; in handle_sigp_dst()
339 rc = __sigp_sense_running(vcpu, dst_vcpu, status_reg); in handle_sigp_dst()
342 vcpu->stat.instruction_sigp_start++; in handle_sigp_dst()
343 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
346 vcpu->stat.instruction_sigp_restart++; in handle_sigp_dst()
347 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
350 vcpu->stat.instruction_sigp_init_cpu_reset++; in handle_sigp_dst()
351 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
354 vcpu->stat.instruction_sigp_cpu_reset++; in handle_sigp_dst()
355 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); in handle_sigp_dst()
358 vcpu->stat.instruction_sigp_unknown++; in handle_sigp_dst()
359 rc = __prepare_sigp_unknown(vcpu, dst_vcpu); in handle_sigp_dst()
363 VCPU_EVENT(vcpu, 4, in handle_sigp_dst()
370 static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code) in handle_sigp_order_in_user_space() argument
372 if (!vcpu->kvm->arch.user_sigp) in handle_sigp_order_in_user_space()
384 vcpu->stat.instruction_sigp_stop++; in handle_sigp_order_in_user_space()
387 vcpu->stat.instruction_sigp_stop_store_status++; in handle_sigp_order_in_user_space()
390 vcpu->stat.instruction_sigp_store_status++; in handle_sigp_order_in_user_space()
393 vcpu->stat.instruction_sigp_store_adtl_status++; in handle_sigp_order_in_user_space()
396 vcpu->stat.instruction_sigp_prefix++; in handle_sigp_order_in_user_space()
399 vcpu->stat.instruction_sigp_start++; in handle_sigp_order_in_user_space()
402 vcpu->stat.instruction_sigp_restart++; in handle_sigp_order_in_user_space()
405 vcpu->stat.instruction_sigp_init_cpu_reset++; in handle_sigp_order_in_user_space()
408 vcpu->stat.instruction_sigp_cpu_reset++; in handle_sigp_order_in_user_space()
411 vcpu->stat.instruction_sigp_unknown++; in handle_sigp_order_in_user_space()
414 VCPU_EVENT(vcpu, 4, "sigp order %u: completely handled in user space", in handle_sigp_order_in_user_space()
420 int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu) in kvm_s390_handle_sigp() argument
422 int r1 = (vcpu->arch.sie_block->ipa & 0x00f0) >> 4; in kvm_s390_handle_sigp()
423 int r3 = vcpu->arch.sie_block->ipa & 0x000f; in kvm_s390_handle_sigp()
425 u16 cpu_addr = vcpu->run->s.regs.gprs[r3]; in kvm_s390_handle_sigp()
430 if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE) in kvm_s390_handle_sigp()
431 return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP); in kvm_s390_handle_sigp()
433 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL); in kvm_s390_handle_sigp()
434 if (handle_sigp_order_in_user_space(vcpu, order_code)) in kvm_s390_handle_sigp()
438 parameter = vcpu->run->s.regs.gprs[r1]; in kvm_s390_handle_sigp()
440 parameter = vcpu->run->s.regs.gprs[r1 + 1]; in kvm_s390_handle_sigp()
442 trace_kvm_s390_handle_sigp(vcpu, order_code, cpu_addr, parameter); in kvm_s390_handle_sigp()
445 vcpu->stat.instruction_sigp_arch++; in kvm_s390_handle_sigp()
446 rc = __sigp_set_arch(vcpu, parameter); in kvm_s390_handle_sigp()
449 rc = handle_sigp_dst(vcpu, order_code, cpu_addr, in kvm_s390_handle_sigp()
451 &vcpu->run->s.regs.gprs[r1]); in kvm_s390_handle_sigp()
457 kvm_s390_set_psw_cc(vcpu, rc); in kvm_s390_handle_sigp()
470 int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu) in kvm_s390_handle_sigp_pei() argument
472 int r3 = vcpu->arch.sie_block->ipa & 0x000f; in kvm_s390_handle_sigp_pei()
473 u16 cpu_addr = vcpu->run->s.regs.gprs[r3]; in kvm_s390_handle_sigp_pei()
475 u8 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL); in kvm_s390_handle_sigp_pei()
477 trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr); in kvm_s390_handle_sigp_pei()
480 dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr); in kvm_s390_handle_sigp_pei()
484 kvm_s390_set_psw_cc(vcpu, SIGP_CC_ORDER_CODE_ACCEPTED); in kvm_s390_handle_sigp_pei()