Lines Matching defs:vcpu

20 static int __sigp_sense(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
39 VCPU_EVENT(vcpu, 4, "sensed status of cpu %x rc %x", dst_vcpu->vcpu_id,
44 static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
49 .u.emerg.code = vcpu->vcpu_id,
55 VCPU_EVENT(vcpu, 4, "sent sigp emerg to cpu %x",
61 static int __sigp_emergency(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
63 return __inject_sigp_emergency(vcpu, dst_vcpu);
66 static int __sigp_conditional_emergency(struct kvm_vcpu *vcpu,
75 idle = is_vcpu_idle(vcpu);
81 if (!is_vcpu_stopped(vcpu)
85 return __inject_sigp_emergency(vcpu, dst_vcpu);
93 static int __sigp_external_call(struct kvm_vcpu *vcpu,
98 .u.extcall.code = vcpu->vcpu_id,
108 VCPU_EVENT(vcpu, 4, "sent sigp ext call to cpu %x",
115 static int __sigp_stop(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu)
126 VCPU_EVENT(vcpu, 4, "sent sigp stop to cpu %x",
132 static int __sigp_stop_and_store_status(struct kvm_vcpu *vcpu,
145 VCPU_EVENT(vcpu, 4, "sent sigp stop and store status to cpu %x",
151 static int __sigp_set_arch(struct kvm_vcpu *vcpu, u32 parameter,
158 kvm_for_each_vcpu(i, v, vcpu->kvm) {
159 if (v == vcpu)
173 static int __sigp_set_prefix(struct kvm_vcpu *vcpu, struct kvm_vcpu *dst_vcpu,
187 if (kvm_is_error_gpa(vcpu->kvm, irq.u.prefix.address)) {
203 static int __sigp_store_status_at_addr(struct kvm_vcpu *vcpu,
225 static int __sigp_sense_running(struct kvm_vcpu *vcpu,
230 if (!test_kvm_facility(vcpu->kvm, 9)) {
246 VCPU_EVENT(vcpu, 4, "sensed running status of cpu %x rc %x",
252 static int __prepare_sigp_re_start(struct kvm_vcpu *vcpu,
268 static int __prepare_sigp_cpu_reset(struct kvm_vcpu *vcpu,
275 static int __prepare_sigp_unknown(struct kvm_vcpu *vcpu,
282 static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code,
286 struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
321 vcpu->stat.instruction_sigp_sense++;
322 rc = __sigp_sense(vcpu, dst_vcpu, status_reg);
325 vcpu->stat.instruction_sigp_external_call++;
326 rc = __sigp_external_call(vcpu, dst_vcpu, status_reg);
329 vcpu->stat.instruction_sigp_emergency++;
330 rc = __sigp_emergency(vcpu, dst_vcpu);
333 vcpu->stat.instruction_sigp_stop++;
334 rc = __sigp_stop(vcpu, dst_vcpu);
337 vcpu->stat.instruction_sigp_stop_store_status++;
338 rc = __sigp_stop_and_store_status(vcpu, dst_vcpu, status_reg);
341 vcpu->stat.instruction_sigp_store_status++;
342 rc = __sigp_store_status_at_addr(vcpu, dst_vcpu, parameter,
346 vcpu->stat.instruction_sigp_prefix++;
347 rc = __sigp_set_prefix(vcpu, dst_vcpu, parameter, status_reg);
350 vcpu->stat.instruction_sigp_cond_emergency++;
351 rc = __sigp_conditional_emergency(vcpu, dst_vcpu, parameter,
355 vcpu->stat.instruction_sigp_sense_running++;
356 rc = __sigp_sense_running(vcpu, dst_vcpu, status_reg);
359 vcpu->stat.instruction_sigp_start++;
360 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code);
363 vcpu->stat.instruction_sigp_restart++;
364 rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code);
367 vcpu->stat.instruction_sigp_init_cpu_reset++;
368 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code);
371 vcpu->stat.instruction_sigp_cpu_reset++;
372 rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code);
375 vcpu->stat.instruction_sigp_unknown++;
376 rc = __prepare_sigp_unknown(vcpu, dst_vcpu);
380 VCPU_EVENT(vcpu, 4,
387 static int handle_sigp_order_in_user_space(struct kvm_vcpu *vcpu, u8 order_code,
390 if (!vcpu->kvm->arch.user_sigp)
402 vcpu->stat.instruction_sigp_stop++;
405 vcpu->stat.instruction_sigp_stop_store_status++;
408 vcpu->stat.instruction_sigp_store_status++;
411 vcpu->stat.instruction_sigp_store_adtl_status++;
414 vcpu->stat.instruction_sigp_prefix++;
417 vcpu->stat.instruction_sigp_start++;
420 vcpu->stat.instruction_sigp_restart++;
423 vcpu->stat.instruction_sigp_init_cpu_reset++;
426 vcpu->stat.instruction_sigp_cpu_reset++;
429 vcpu->stat.instruction_sigp_unknown++;
431 VCPU_EVENT(vcpu, 3, "SIGP: order %u for CPU %d handled in userspace",
437 int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
439 int r1 = (vcpu->arch.sie_block->ipa & 0x00f0) >> 4;
440 int r3 = vcpu->arch.sie_block->ipa & 0x000f;
442 u16 cpu_addr = vcpu->run->s.regs.gprs[r3];
447 if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE)
448 return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP);
450 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL);
451 if (handle_sigp_order_in_user_space(vcpu, order_code, cpu_addr))
455 parameter = vcpu->run->s.regs.gprs[r1];
457 parameter = vcpu->run->s.regs.gprs[r1 + 1];
459 trace_kvm_s390_handle_sigp(vcpu, order_code, cpu_addr, parameter);
462 vcpu->stat.instruction_sigp_arch++;
463 rc = __sigp_set_arch(vcpu, parameter,
464 &vcpu->run->s.regs.gprs[r1]);
467 rc = handle_sigp_dst(vcpu, order_code, cpu_addr,
469 &vcpu->run->s.regs.gprs[r1]);
475 kvm_s390_set_psw_cc(vcpu, rc);
488 int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu)
490 int r3 = vcpu->arch.sie_block->ipa & 0x000f;
491 u16 cpu_addr = vcpu->run->s.regs.gprs[r3];
493 u8 order_code = kvm_s390_get_base_disp_rs(vcpu, NULL);
496 trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr);
498 dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
502 kvm_s390_set_psw_cc(vcpu, SIGP_CC_ORDER_CODE_ACCEPTED);