vcpu_unblock(current);
}
+void vcpu_kick(struct vcpu *vcpu)
+{
+ bool running = vcpu->is_running;
+
+ vcpu_unblock(vcpu);
+ if ( running && vcpu != current )
+ {
+ perfc_incr(vcpu_kick);
+ smp_send_event_check_mask(cpumask_of(vcpu->processor));
+ }
+}
+
/*
* Local variables:
* mode: C
#include <xen/sched.h>
#include <xen/perfc.h>
+#include <asm/event.h>
#include <asm/current.h>
#include <asm/mmio.h>
uint8_t priority;
struct pending_irq *iter, *n;
unsigned long flags;
- bool running;
/*
* For edge triggered interrupts we always ignore a "falling edge".
list_add_tail(&n->inflight, &v->arch.vgic.inflight_irqs);
out:
spin_unlock_irqrestore(&v->arch.vgic.lock, flags);
+
/* we have a new higher priority irq, inject it into the guest */
- running = v->is_running;
- vcpu_unblock(v);
- if ( running && v != current )
- {
- perfc_incr(vgic_cross_cpu_intr_inject);
- smp_send_event_check_mask(cpumask_of(v->processor));
- }
+ vcpu_kick(v);
return;
}
PERFCOUNTER(vpsci_cpu_affinity_info, "vpsci: cpu_affinity_info")
PERFCOUNTER(vpsci_features, "vpsci: features")
+PERFCOUNTER(vcpu_kick, "vcpu: notify other vcpu")
+
PERFCOUNTER(vgicd_reads, "vgicd: read")
PERFCOUNTER(vgicd_writes, "vgicd: write")
PERFCOUNTER(vgicr_reads, "vgicr: read")
PERFCOUNTER(vgic_sgi_list , "vgic: SGI send to list")
PERFCOUNTER(vgic_sgi_others, "vgic: SGI send to others")
PERFCOUNTER(vgic_sgi_self, "vgic: SGI send to self")
-PERFCOUNTER(vgic_cross_cpu_intr_inject, "vgic: cross-CPU irq inject")
PERFCOUNTER(vgic_irq_migrates, "vgic: irq migration")
PERFCOUNTER(vuart_reads, "vuart: read")