[PATCH 2/2] KVM: ARM: Turn IRQ_LINE debug print into trace event

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Define a proper trace event for KVM_IRQ_LINE for ARM and use this for
all interrupt injection, CPU or VGIC.

Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx>
---
 arch/arm/kvm/arm.c   |    4 ++--
 arch/arm/kvm/trace.h |   25 +++++++++++++++++++++++++
 arch/arm/kvm/vgic.c  |    1 -
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index b296834..7f0d5af 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -707,8 +707,6 @@ static int vcpu_interrupt_line(struct kvm_vcpu *vcpu, int number, bool level)
 	bool set;
 	unsigned long *ptr;
 
-	trace_kvm_set_irq(number, level, 0);
-
 	if (number == KVM_ARM_IRQ_CPU_IRQ)
 		bit_index = ffs(HCR_VI) - 1;
 	else /* KVM_ARM_IRQ_CPU_FIQ */
@@ -748,6 +746,8 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level)
 	vcpu_idx = (irq >> KVM_ARM_IRQ_VCPU_SHIFT) & KVM_ARM_IRQ_VCPU_MASK;
 	irq_num = (irq >> KVM_ARM_IRQ_NUM_SHIFT) & KVM_ARM_IRQ_NUM_MASK;
 
+	trace_kvm_irq_line(irq_type, vcpu_idx, irq_num, irq_level->level);
+
 	if (irq_type == KVM_ARM_IRQ_TYPE_CPU ||
 	    irq_type == KVM_ARM_IRQ_TYPE_PPI) {
 		if (vcpu_idx >= nrcpus)
diff --git a/arch/arm/kvm/trace.h b/arch/arm/kvm/trace.h
index a46f2b1..b371138 100644
--- a/arch/arm/kvm/trace.h
+++ b/arch/arm/kvm/trace.h
@@ -67,6 +67,31 @@ TRACE_EVENT(kvm_guest_fault,
 		  __entry->hsr, __entry->ipa)
 );
 
+TRACE_EVENT(kvm_irq_line,
+	TP_PROTO(unsigned int type, int vcpu_idx, int irq_num, int level),
+	TP_ARGS(type, vcpu_idx, irq_num, level),
+
+	TP_STRUCT__entry(
+		__field(	unsigned int,	type		)
+		__field(	int,		vcpu_idx	)
+		__field(	int,		irq_num		)
+		__field(	int,		level		)
+	),
+
+	TP_fast_assign(
+		__entry->type		= type;
+		__entry->vcpu_idx	= vcpu_idx;
+		__entry->irq_num	= irq_num;
+		__entry->level		= level;
+	),
+
+	TP_printk("Inject %s interrupt (%d), vcpu->idx: %d, num: %d, level: %d",
+		  (__entry->type == KVM_ARM_IRQ_TYPE_CPU) ? "CPU" :
+		  (__entry->type == KVM_ARM_IRQ_TYPE_PPI) ? "VGIC PPI" :
+		  (__entry->type == KVM_ARM_IRQ_TYPE_SPI) ? "VGIC SPI" : "UNKNOWN",
+		  __entry->type, __entry->vcpu_idx, __entry->irq_num, __entry->level)
+);
+
 TRACE_EVENT(kvm_mmio_emulate,
 	TP_PROTO(unsigned long vcpu_pc, unsigned long instr,
 		 unsigned long cpsr),
diff --git a/arch/arm/kvm/vgic.c b/arch/arm/kvm/vgic.c
index 3da7a44..27f8e81 100644
--- a/arch/arm/kvm/vgic.c
+++ b/arch/arm/kvm/vgic.c
@@ -874,7 +874,6 @@ int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
 	unsigned long flags;
 	bool updated_state = false;
 
-	kvm_debug("Inject IRQ%d\n", irq_num);
 	spin_lock_irqsave(&dist->lock, flags);
 	is_edge = vgic_irq_is_edge(dist, irq_num);
 	state = vgic_bitmap_get_irq_val(&dist->irq_state, cpuid, irq_num);
-- 
1.7.9.5

_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm


[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux