aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2015-07-09 08:08:18 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-07-29 05:02:34 -0400
commit3f24ba150cb6be11222ced427f2997c33fbd665e (patch)
treeac2e800fe60662acc9f95af7df73d7e636ae3e5c
parentab7090a611c6f4ea327c811c08458147e54130d2 (diff)
KVM: s390: Fixup interrupt vcpu event messages and levels
This reworks the debug logging for interrupt related logs. Several changes: - unify program int/irq - improve decoding (e.g. use mcic instead of parm64 for machine check injection) - remove useless interrupt type number (the name is enough) - rename "interrupt:" to "deliver:" as the other side is called "inject" - use log level 3 for state changing and/or seldom events (like machine checks, restart..) - use log level 4 for frequent events - use 0x prefix for hex numbers - add pfault done logging - move some tracing outside spinlock Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
-rw-r--r--arch/s390/kvm/interrupt.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index a5acaccca753..6c98fb61d154 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -311,8 +311,8 @@ static int __must_check __deliver_pfault_init(struct kvm_vcpu *vcpu)
311 li->irq.ext.ext_params2 = 0; 311 li->irq.ext.ext_params2 = 0;
312 spin_unlock(&li->lock); 312 spin_unlock(&li->lock);
313 313
314 VCPU_EVENT(vcpu, 4, "interrupt: pfault init parm:%x,parm64:%llx", 314 VCPU_EVENT(vcpu, 4, "deliver: pfault init token 0x%llx",
315 0, ext.ext_params2); 315 ext.ext_params2);
316 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, 316 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
317 KVM_S390_INT_PFAULT_INIT, 317 KVM_S390_INT_PFAULT_INIT,
318 0, ext.ext_params2); 318 0, ext.ext_params2);
@@ -368,7 +368,7 @@ static int __must_check __deliver_machine_check(struct kvm_vcpu *vcpu)
368 spin_unlock(&fi->lock); 368 spin_unlock(&fi->lock);
369 369
370 if (deliver) { 370 if (deliver) {
371 VCPU_EVENT(vcpu, 4, "interrupt: machine check mcic=%llx", 371 VCPU_EVENT(vcpu, 3, "deliver: machine check mcic 0x%llx",
372 mchk.mcic); 372 mchk.mcic);
373 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, 373 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
374 KVM_S390_MCHK, 374 KVM_S390_MCHK,
@@ -403,7 +403,7 @@ static int __must_check __deliver_restart(struct kvm_vcpu *vcpu)
403 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 403 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
404 int rc; 404 int rc;
405 405
406 VCPU_EVENT(vcpu, 4, "%s", "interrupt: cpu restart"); 406 VCPU_EVENT(vcpu, 3, "%s", "deliver: cpu restart");
407 vcpu->stat.deliver_restart_signal++; 407 vcpu->stat.deliver_restart_signal++;
408 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0); 408 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
409 409
@@ -449,7 +449,7 @@ static int __must_check __deliver_emergency_signal(struct kvm_vcpu *vcpu)
449 clear_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs); 449 clear_bit(IRQ_PEND_EXT_EMERGENCY, &li->pending_irqs);
450 spin_unlock(&li->lock); 450 spin_unlock(&li->lock);
451 451
452 VCPU_EVENT(vcpu, 4, "%s", "interrupt: sigp emerg"); 452 VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp emerg");
453 vcpu->stat.deliver_emergency_signal++; 453 vcpu->stat.deliver_emergency_signal++;
454 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY, 454 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
455 cpu_addr, 0); 455 cpu_addr, 0);
@@ -476,7 +476,7 @@ static int __must_check __deliver_external_call(struct kvm_vcpu *vcpu)
476 clear_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs); 476 clear_bit(IRQ_PEND_EXT_EXTERNAL, &li->pending_irqs);
477 spin_unlock(&li->lock); 477 spin_unlock(&li->lock);
478 478
479 VCPU_EVENT(vcpu, 4, "%s", "interrupt: sigp ext call"); 479 VCPU_EVENT(vcpu, 4, "%s", "deliver: sigp ext call");
480 vcpu->stat.deliver_external_call++; 480 vcpu->stat.deliver_external_call++;
481 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, 481 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
482 KVM_S390_INT_EXTERNAL_CALL, 482 KVM_S390_INT_EXTERNAL_CALL,
@@ -505,7 +505,7 @@ static int __must_check __deliver_prog(struct kvm_vcpu *vcpu)
505 memset(&li->irq.pgm, 0, sizeof(pgm_info)); 505 memset(&li->irq.pgm, 0, sizeof(pgm_info));
506 spin_unlock(&li->lock); 506 spin_unlock(&li->lock);
507 507
508 VCPU_EVENT(vcpu, 4, "interrupt: pgm check code:%x, ilc:%x", 508 VCPU_EVENT(vcpu, 3, "deliver: program irq code 0x%x, ilc:%d",
509 pgm_info.code, ilc); 509 pgm_info.code, ilc);
510 vcpu->stat.deliver_program_int++; 510 vcpu->stat.deliver_program_int++;
511 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_PROGRAM_INT, 511 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_PROGRAM_INT,
@@ -621,7 +621,7 @@ static int __must_check __deliver_service(struct kvm_vcpu *vcpu)
621 clear_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs); 621 clear_bit(IRQ_PEND_EXT_SERVICE, &fi->pending_irqs);
622 spin_unlock(&fi->lock); 622 spin_unlock(&fi->lock);
623 623
624 VCPU_EVENT(vcpu, 4, "interrupt: sclp parm:%x", 624 VCPU_EVENT(vcpu, 4, "deliver: sclp parameter 0x%x",
625 ext.ext_params); 625 ext.ext_params);
626 vcpu->stat.deliver_service_signal++; 626 vcpu->stat.deliver_service_signal++;
627 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE, 627 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, KVM_S390_INT_SERVICE,
@@ -650,9 +650,6 @@ static int __must_check __deliver_pfault_done(struct kvm_vcpu *vcpu)
650 struct kvm_s390_interrupt_info, 650 struct kvm_s390_interrupt_info,
651 list); 651 list);
652 if (inti) { 652 if (inti) {
653 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
654 KVM_S390_INT_PFAULT_DONE, 0,
655 inti->ext.ext_params2);
656 list_del(&inti->list); 653 list_del(&inti->list);
657 fi->counters[FIRQ_CNTR_PFAULT] -= 1; 654 fi->counters[FIRQ_CNTR_PFAULT] -= 1;
658 } 655 }
@@ -661,6 +658,12 @@ static int __must_check __deliver_pfault_done(struct kvm_vcpu *vcpu)
661 spin_unlock(&fi->lock); 658 spin_unlock(&fi->lock);
662 659
663 if (inti) { 660 if (inti) {
661 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
662 KVM_S390_INT_PFAULT_DONE, 0,
663 inti->ext.ext_params2);
664 VCPU_EVENT(vcpu, 4, "deliver: pfault done token 0x%llx",
665 inti->ext.ext_params2);
666
664 rc = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE, 667 rc = put_guest_lc(vcpu, EXT_IRQ_CP_SERVICE,
665 (u16 *)__LC_EXT_INT_CODE); 668 (u16 *)__LC_EXT_INT_CODE);
666 rc |= put_guest_lc(vcpu, PFAULT_DONE, 669 rc |= put_guest_lc(vcpu, PFAULT_DONE,
@@ -690,7 +693,7 @@ static int __must_check __deliver_virtio(struct kvm_vcpu *vcpu)
690 list); 693 list);
691 if (inti) { 694 if (inti) {
692 VCPU_EVENT(vcpu, 4, 695 VCPU_EVENT(vcpu, 4,
693 "interrupt: virtio parm:%x,parm64:%llx", 696 "deliver: virtio parm: 0x%x,parm64: 0x%llx",
694 inti->ext.ext_params, inti->ext.ext_params2); 697 inti->ext.ext_params, inti->ext.ext_params2);
695 vcpu->stat.deliver_virtio_interrupt++; 698 vcpu->stat.deliver_virtio_interrupt++;
696 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, 699 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
@@ -740,7 +743,7 @@ static int __must_check __deliver_io(struct kvm_vcpu *vcpu,
740 struct kvm_s390_interrupt_info, 743 struct kvm_s390_interrupt_info,
741 list); 744 list);
742 if (inti) { 745 if (inti) {
743 VCPU_EVENT(vcpu, 4, "interrupt: I/O %llx", inti->type); 746 VCPU_EVENT(vcpu, 4, "deliver: I/O 0x%llx", inti->type);
744 vcpu->stat.deliver_io_int++; 747 vcpu->stat.deliver_io_int++;
745 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id, 748 trace_kvm_s390_deliver_interrupt(vcpu->vcpu_id,
746 inti->type, 749 inti->type,
@@ -863,7 +866,7 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
863 866
864 __set_cpu_idle(vcpu); 867 __set_cpu_idle(vcpu);
865 hrtimer_start(&vcpu->arch.ckc_timer, ktime_set (0, sltime) , HRTIMER_MODE_REL); 868 hrtimer_start(&vcpu->arch.ckc_timer, ktime_set (0, sltime) , HRTIMER_MODE_REL);
866 VCPU_EVENT(vcpu, 5, "enabled wait via clock comparator: %llx ns", sltime); 869 VCPU_EVENT(vcpu, 4, "enabled wait via clock comparator: %llu ns", sltime);
867no_timer: 870no_timer:
868 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx); 871 srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
869 kvm_vcpu_block(vcpu); 872 kvm_vcpu_block(vcpu);
@@ -1008,8 +1011,8 @@ static int __inject_pfault_init(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1008{ 1011{
1009 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1012 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1010 1013
1011 VCPU_EVENT(vcpu, 3, "inject: external irq params:%x, params2:%llx", 1014 VCPU_EVENT(vcpu, 4, "inject: pfault init parameter block at 0x%llx",
1012 irq->u.ext.ext_params, irq->u.ext.ext_params2); 1015 irq->u.ext.ext_params2);
1013 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_PFAULT_INIT, 1016 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_PFAULT_INIT,
1014 irq->u.ext.ext_params, 1017 irq->u.ext.ext_params,
1015 irq->u.ext.ext_params2); 1018 irq->u.ext.ext_params2);
@@ -1041,7 +1044,7 @@ static int __inject_extcall(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1041 struct kvm_s390_extcall_info *extcall = &li->irq.extcall; 1044 struct kvm_s390_extcall_info *extcall = &li->irq.extcall;
1042 uint16_t src_id = irq->u.extcall.code; 1045 uint16_t src_id = irq->u.extcall.code;
1043 1046
1044 VCPU_EVENT(vcpu, 3, "inject: external call source-cpu:%u", 1047 VCPU_EVENT(vcpu, 4, "inject: external call source-cpu:%u",
1045 src_id); 1048 src_id);
1046 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EXTERNAL_CALL, 1049 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EXTERNAL_CALL,
1047 src_id, 0); 1050 src_id, 0);
@@ -1110,7 +1113,7 @@ static int __inject_sigp_restart(struct kvm_vcpu *vcpu,
1110{ 1113{
1111 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1114 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1112 1115
1113 VCPU_EVENT(vcpu, 3, "inject: restart type %llx", irq->type); 1116 VCPU_EVENT(vcpu, 3, "%s", "inject: restart int");
1114 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0); 1117 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_RESTART, 0, 0);
1115 1118
1116 set_bit(IRQ_PEND_RESTART, &li->pending_irqs); 1119 set_bit(IRQ_PEND_RESTART, &li->pending_irqs);
@@ -1122,7 +1125,7 @@ static int __inject_sigp_emergency(struct kvm_vcpu *vcpu,
1122{ 1125{
1123 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1126 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1124 1127
1125 VCPU_EVENT(vcpu, 3, "inject: emergency %u\n", 1128 VCPU_EVENT(vcpu, 4, "inject: emergency from cpu %u",
1126 irq->u.emerg.code); 1129 irq->u.emerg.code);
1127 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY, 1130 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_EMERGENCY,
1128 irq->u.emerg.code, 0); 1131 irq->u.emerg.code, 0);
@@ -1138,7 +1141,7 @@ static int __inject_mchk(struct kvm_vcpu *vcpu, struct kvm_s390_irq *irq)
1138 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1141 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1139 struct kvm_s390_mchk_info *mchk = &li->irq.mchk; 1142 struct kvm_s390_mchk_info *mchk = &li->irq.mchk;
1140 1143
1141 VCPU_EVENT(vcpu, 5, "inject: machine check parm64:%llx", 1144 VCPU_EVENT(vcpu, 3, "inject: machine check mcic 0x%llx",
1142 irq->u.mchk.mcic); 1145 irq->u.mchk.mcic);
1143 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_MCHK, 0, 1146 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_MCHK, 0,
1144 irq->u.mchk.mcic); 1147 irq->u.mchk.mcic);
@@ -1168,7 +1171,7 @@ static int __inject_ckc(struct kvm_vcpu *vcpu)
1168{ 1171{
1169 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1172 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1170 1173
1171 VCPU_EVENT(vcpu, 3, "inject: type %x", KVM_S390_INT_CLOCK_COMP); 1174 VCPU_EVENT(vcpu, 3, "%s", "inject: clock comparator external");
1172 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP, 1175 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CLOCK_COMP,
1173 0, 0); 1176 0, 0);
1174 1177
@@ -1181,7 +1184,7 @@ static int __inject_cpu_timer(struct kvm_vcpu *vcpu)
1181{ 1184{
1182 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int; 1185 struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
1183 1186
1184 VCPU_EVENT(vcpu, 3, "inject: type %x", KVM_S390_INT_CPU_TIMER); 1187 VCPU_EVENT(vcpu, 3, "%s", "inject: cpu timer external");
1185 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER, 1188 trace_kvm_s390_inject_vcpu(vcpu->vcpu_id, KVM_S390_INT_CPU_TIMER,
1186 0, 0); 1189 0, 0);
1187 1190
@@ -1431,14 +1434,14 @@ int kvm_s390_inject_vm(struct kvm *kvm,
1431 inti->ext.ext_params2 = s390int->parm64; 1434 inti->ext.ext_params2 = s390int->parm64;
1432 break; 1435 break;
1433 case KVM_S390_INT_SERVICE: 1436 case KVM_S390_INT_SERVICE:
1434 VM_EVENT(kvm, 5, "inject: sclp parm:%x", s390int->parm); 1437 VM_EVENT(kvm, 4, "inject: sclp parm:%x", s390int->parm);
1435 inti->ext.ext_params = s390int->parm; 1438 inti->ext.ext_params = s390int->parm;
1436 break; 1439 break;
1437 case KVM_S390_INT_PFAULT_DONE: 1440 case KVM_S390_INT_PFAULT_DONE:
1438 inti->ext.ext_params2 = s390int->parm64; 1441 inti->ext.ext_params2 = s390int->parm64;
1439 break; 1442 break;
1440 case KVM_S390_MCHK: 1443 case KVM_S390_MCHK:
1441 VM_EVENT(kvm, 5, "inject: machine check parm64:%llx", 1444 VM_EVENT(kvm, 3, "inject: machine check mcic 0x%llx",
1442 s390int->parm64); 1445 s390int->parm64);
1443 inti->mchk.cr14 = s390int->parm; /* upper bits are not used */ 1446 inti->mchk.cr14 = s390int->parm; /* upper bits are not used */
1444 inti->mchk.mcic = s390int->parm64; 1447 inti->mchk.mcic = s390int->parm64;