@@ -27,6 +27,9 @@ struct gic {
struct {
void (*send_self)(void);
void (*send_broadcast)(void);
+ u64 ipi_inject_time;
+ u64 ipi_receive_time[NR_CPUS];
+ int nr_records;
} ipi;
};
@@ -142,6 +145,7 @@ static void check_irqnr(u32 irqnr)
static void ipi_handler(struct pt_regs *regs __unused)
{
+ gic->ipi.ipi_receive_time[gic->ipi.nr_records++] = get_cntvct();
u32 irqstat = gic_read_iar();
u32 irqnr = gic_iar_irqnr(irqstat);
@@ -187,9 +191,16 @@ static void ipi_test_self(void)
stats_reset();
cpumask_clear(&mask);
cpumask_set_cpu(smp_processor_id(), &mask);
+
+ gic->ipi.nr_records = 0;
+ gic->ipi.ipi_inject_time = get_cntvct();
gic->ipi.send_self();
+
check_acked("IPI: self", &mask);
report_prefix_pop();
+
+ report_info("The latency of ipi_test_self: %ld cycles",
+ gic->ipi.ipi_receive_time[0] - gic->ipi.ipi_inject_time);
}
static void ipi_test_smp(void)
@@ -202,17 +213,33 @@ static void ipi_test_smp(void)
cpumask_copy(&mask, &cpu_present_mask);
for (i = smp_processor_id() & 1; i < nr_cpus; i += 2)
cpumask_clear_cpu(i, &mask);
+
+ gic->ipi.nr_records = 0;
+ gic->ipi.ipi_inject_time = get_cntvct();
gic_ipi_send_mask(IPI_IRQ, &mask);
+
check_acked("IPI: directed", &mask);
report_prefix_pop();
+ for (i = 0; i < gic->ipi.nr_records; i++)
+ report_info("The latency of ipi_test_smp(directed): %ld cycles",
+ gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time);
+
report_prefix_push("broadcast");
stats_reset();
cpumask_copy(&mask, &cpu_present_mask);
cpumask_clear_cpu(smp_processor_id(), &mask);
+
+ gic->ipi.nr_records = 0;
+ gic->ipi.ipi_inject_time = get_cntvct();
gic->ipi.send_broadcast();
+
check_acked("IPI: broadcast", &mask);
report_prefix_pop();
+
+ for (i = 0; i < gic->ipi.nr_records; i++)
+ report_info("The latency of ipi_test_smp(broadcast): %ld cycles",
+ gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time);
}
static void ipi_enable(void)
This patch add a test to measure the latency of IPI injection. Signed-off-by: Jingyi Wang <wangjingyi11@huawei.com> --- arm/gic.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)