[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
- [Qemu-devel] [RFC 00/11] Current MTTCG kvm-unit-test patches, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 02/11] arm/arm64: irq enable/disable, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 04/11] arm/arm64: Add IPI test,
Alex Bennée <=
- [Qemu-devel] [RFC 01/11] config/config-arm-common: build-up tests-common target, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 03/11] arm/arm64: Add initial gic support, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 06/11] arm/run: set indentation defaults for emacs, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 08/11] arm/tlbflush-test: Add TLB torture test, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 10/11] arm/barrier-litmus-tests: add some litmus tests, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 05/11] lib: add isaac prng library from CCAN, Alex Bennée, 2016/02/26
- [Qemu-devel] [RFC 07/11] arm/run: allow aarch64 to start arm binaries, Alex Bennée, 2016/02/26