summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2017-10-03 10:13:23 +0000
committerMarc Zyngier <marc.zyngier@arm.com>2017-10-03 11:21:28 +0100
commit4305520b5e8d505da683162e18c5ada7589b2dad (patch)
tree6dc35e3429df2f141a00e3b4be5dfe7f609fce8b
parente8d4b6aaf55d95fef0c244887d0ca06d8b500679 (diff)
downloadkvm-ws-tests-4305520b5e8d505da683162e18c5ada7589b2dad.tar.gz
Add memory faulting tests
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
-rw-r--r--Makefile16
-rw-r--r--do_fault_read.S44
-rw-r--r--do_fault_read_write.S45
-rw-r--r--do_fault_write.S45
4 files changed, 145 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 57c5d32..2ac8d85 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,8 @@
-BINS := do_hvc.bin do_sgi.bin do_sysreg.bin do_fp_hvc.bin
+LOOP_BINS := do_hvc.bin do_sgi.bin do_sysreg.bin do_fp_hvc.bin
+MEMORY_BINS := do_fault_read.bin do_fault_write.bin do_fault_read_write.bin
+
+BINS := $(LOOP_BINS) $(MEMORY_BINS)
PERF := perf
LKVM := lkvm
@@ -13,12 +16,15 @@ all: $(BINS)
clean:
rm -f $(BINS)
-.PHONY: tests-gicv2 tests-gicv3
+.PHONY: tests-gicv2 tests-gicv3 tests-memory
tests-gicv2:
- @echo GICv2:; for i in $(BINS); do echo -n $$i: ; LANG='C' taskset -c 1 $(PERF) stat -e cycles:hk $(LKVM) run -c1 --kernel $$i --irqchip=gicv2 $(LKVM_ARGS) 2>&1 >/dev/null| grep cycles | awk '{print $$1 / 2^20}'; done
+ @echo GICv2:; for i in $(LOOP_BINS); do echo -n $$i: ; LANG='C' taskset -c 1 $(PERF) stat -e cycles:hk $(LKVM) run -c1 --kernel $$i --irqchip=gicv2 $(LKVM_ARGS) 2>&1 >/dev/null| grep cycles | awk '{print $$1 / 2^20}'; done
tests-gicv3:
- @echo GICv3:; for i in $(BINS); do echo -n $$i: ; LANG='C' taskset -c 1 $(PERF) stat -e cycles:hk $(LKVM) run -c1 --kernel $$i --irqchip=gicv3 2>&1 >/dev/null | grep cycles | awk '{print $$1 / 2^20}'; done
+ @echo GICv3:; for i in $(LOOP_BINS); do echo -n $$i: ; LANG='C' taskset -c 1 $(PERF) stat -e cycles:hk $(LKVM) run -c1 --kernel $$i --irqchip=gicv3 2>&1 >/dev/null | grep cycles | awk '{print $$1 / 2^20}'; done
+
+tests-memory:
+ @echo Memory:; for i in $(MEMORY_BINS); do echo -n $$i: ; LANG='C' taskset -c 1 $(PERF) stat -e cycles:hk $(LKVM) run -c1 --kernel $$i -m 1024 2>&1 >/dev/null | grep elapsed; done
-tests: $(BINS) tests-gicv2 tests-gicv3
+tests: $(BINS) tests-gicv2 tests-gicv3 tests-memory
diff --git a/do_fault_read.S b/do_fault_read.S
new file mode 100644
index 0000000..9c6ce9a
--- /dev/null
+++ b/do_fault_read.S
@@ -0,0 +1,44 @@
+
+.macro ventry label
+ .align 7
+ b \label
+.endm
+
+ adr x0, vectors
+ msr vbar_el1, x0
+ isb
+
+ adr x0, ram
+1: ldr x3, [x0]
+ mov x30, x0
+ add x0, x0, #4096
+ tst x0, #(1 << 30) // 1GB
+ b.eq 1b
+
+die:
+ mov x0, #0x84000000
+ add x0, x0, #9
+ hvc #0
+ b .
+
+ .align 11
+vectors:
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+
+ .align 12
+ram:
diff --git a/do_fault_read_write.S b/do_fault_read_write.S
new file mode 100644
index 0000000..c1d8fc7
--- /dev/null
+++ b/do_fault_read_write.S
@@ -0,0 +1,45 @@
+
+.macro ventry label
+ .align 7
+ b \label
+.endm
+
+ adr x0, vectors
+ msr vbar_el1, x0
+ isb
+
+ adr x0, ram
+1: ldr x3, [x0]
+ mov x30, x0
+ str x3, [x0]
+ add x0, x0, #4096
+ tst x0, #(1 << 30) // 1GB
+ b.eq 1b
+
+die:
+ mov x0, #0x84000000
+ add x0, x0, #9
+ hvc #0
+ b .
+
+ .align 11
+vectors:
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+
+ .align 12
+ram:
diff --git a/do_fault_write.S b/do_fault_write.S
new file mode 100644
index 0000000..fa53a94
--- /dev/null
+++ b/do_fault_write.S
@@ -0,0 +1,45 @@
+
+.macro ventry label
+ .align 7
+ b \label
+.endm
+
+ adr x0, vectors
+ msr vbar_el1, x0
+ isb
+
+ adr x0, ram
+ mov x3, #1234
+1: str x3, [x0]
+ mov x30, x0
+ add x0, x0, #4096
+ tst x0, #(1 << 30) // 1GB
+ b.eq 1b
+
+die:
+ mov x0, #0x84000000
+ add x0, x0, #9
+ hvc #0
+ b .
+
+ .align 11
+vectors:
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+ ventry die
+
+ .align 12
+ram: