diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2015-07-09 08:08:18 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2015-07-29 05:02:34 -0400 |
commit | 3f24ba150cb6be11222ced427f2997c33fbd665e (patch) | |
tree | ac2e800fe60662acc9f95af7df73d7e636ae3e5c | |
parent | ab7090a611c6f4ea327c811c08458147e54130d2 (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.c | 51 |
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); |
867 | no_timer: | 870 | no_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; |