aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S
diff options
context:
space:
mode:
authorMichael Ellerman <mpe@ellerman.id.au>2018-08-03 20:13:05 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2018-08-08 00:32:35 +1000
commit2679f63fe5e4bb1459a0c20859a99c70c15d5ea1 (patch)
tree19a843ace4fd633800529e9f44e77d583f7fd464 /tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S
parentselftests/powerpc/64: Test all paths through copy routines (diff)
downloadlinux-dev-2679f63fe5e4bb1459a0c20859a99c70c15d5ea1.tar.xz
linux-dev-2679f63fe5e4bb1459a0c20859a99c70c15d5ea1.zip
selftests/powerpc/64: Test exception cases in copy_tofrom_user
This adds a set of test cases to test the behaviour of copy_tofrom_user when exceptions are encountered accessing the source or destination. Currently, copy_tofrom_user does not always copy as many bytes as possible when an exception occurs on a store to the destination, and that is reflected in failures in these tests. Based on a test program from Anton Blanchard. [paulus@ozlabs.org - test all three paths, wrote commit description, made EX_TABLE create an exception table.] Signed-off-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S')
-rw-r--r--tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S24
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S b/tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S
new file mode 100644
index 000000000000..3363b86407d6
--- /dev/null
+++ b/tools/testing/selftests/powerpc/copyloops/copy_tofrom_user_reference.S
@@ -0,0 +1,24 @@
+#include <asm/ppc_asm.h>
+
+_GLOBAL(copy_tofrom_user_reference)
+ cmpdi r5,0
+ beq 4f
+
+ mtctr r5
+
+1: lbz r6,0(r4)
+2: stb r6,0(r3)
+ addi r3,r3,1
+ addi r4,r4,1
+ bdnz 1b
+
+3: mfctr r3
+ blr
+
+4: mr r3,r5
+ blr
+
+.section __ex_table,"a"
+ .llong 1b,3b
+ .llong 2b,3b
+.text