qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [RFC 04/11] arm/arm64: Add IPI test


From: Alex Bennée
Subject: [Qemu-devel] [RFC 04/11] arm/arm64: Add IPI test
Date: Fri, 26 Feb 2016 13:15:26 +0000

From: Andrew Jones <address@hidden>

Signed-off-by: Andrew Jones <address@hidden>
[ajb: slight tweak to .mak file]
Signed-off-by: Alex Bennée <address@hidden>
---
 arm/ipi-test.c               | 58 ++++++++++++++++++++++++++++++++++++++++++++
 config/config-arm-common.mak |  2 ++
 2 files changed, 60 insertions(+)
 create mode 100644 arm/ipi-test.c

diff --git a/arm/ipi-test.c b/arm/ipi-test.c
new file mode 100644
index 0000000..705295f
--- /dev/null
+++ b/arm/ipi-test.c
@@ -0,0 +1,58 @@
+/*
+ * Test sending an IPI and handling IRQ exceptions.
+ *
+ * Copyright (C) 2015, Red Hat Inc, Andrew Jones <address@hidden>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.
+ */
+#include <libcflat.h>
+#include <asm/setup.h>
+#include <asm/processor.h>
+#include <asm/gic.h>
+#include <asm/smp.h>
+#include <asm/barrier.h>
+
+static volatile bool ready, acked, done;
+
+static void irq_handler(struct pt_regs *regs __unused)
+{
+       gic_irq_ack();
+       acked = true;
+}
+
+static void ipi_test(void)
+{
+       gic_enable();
+#ifdef __arm__
+       install_exception_handler(EXCPTN_IRQ, irq_handler);
+#else
+       install_irq_handler(EL1H_IRQ, irq_handler);
+#endif
+       local_irq_enable();
+       ready = true;
+       wfi();
+       report("IPI", acked);
+       done = true;
+       halt();
+}
+
+int main(void)
+{
+       if (nr_cpus < 2) {
+               printf("ipi-test requires '-smp 2'\n");
+               abort();
+       }
+
+       gic_enable();
+       smp_boot_secondary(1, ipi_test);
+
+       while (!ready)
+               cpu_relax();
+
+       gic_send_sgi(1, 1);
+
+       while (!done)
+               cpu_relax();
+
+       return report_summary();
+}
diff --git a/config/config-arm-common.mak b/config/config-arm-common.mak
index e037507..d90eccc 100644
--- a/config/config-arm-common.mak
+++ b/config/config-arm-common.mak
@@ -11,6 +11,7 @@ endif
 
 tests-common = $(TEST_DIR)/selftest.flat
 tests-common += $(TEST_DIR)/spinlock-test.flat
+tests-common += $(TEST_DIR)/ipi-test.flat
 
 all: test_cases
 
@@ -69,3 +70,4 @@ test_cases: $(generated_files) $(tests-common) $(tests)
 
 $(TEST_DIR)/selftest.elf: $(cstart.o) $(TEST_DIR)/selftest.o
 $(TEST_DIR)/spinlock-test.elf: $(cstart.o) $(TEST_DIR)/spinlock-test.o
+$(TEST_DIR)/ipi-test.elf: $(cstart.o) $(TEST_DIR)/ipi-test.o
-- 
2.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]