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>
This commit is contained in:
Michael Ellerman
2018-08-03 20:13:05 +10:00
parent 98c45f51f7
commit 2679f63fe5
6 changed files with 188 additions and 21 deletions

View File

@@ -1,4 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __SELFTESTS_POWERPC_PPC_ASM_H
#define __SELFTESTS_POWERPC_PPC_ASM_H
#include <ppc-asm.h>
#define CONFIG_ALTIVEC
@@ -26,25 +28,10 @@
#define PPC_MTOCRF(A, B) mtocrf A, B
#define EX_TABLE(x, y)
FUNC_START(enter_vmx_usercopy)
li r3,1
blr
FUNC_START(exit_vmx_usercopy)
li r3,0
blr
FUNC_START(enter_vmx_ops)
li r3,1
blr
FUNC_START(exit_vmx_ops)
blr
FUNC_START(__copy_tofrom_user_base)
blr
#define EX_TABLE(x, y) \
.section __ex_table,"a"; \
.8byte x, y; \
.previous
#define BEGIN_FTR_SECTION .if test_feature
#define FTR_SECTION_ELSE .else
@@ -56,3 +43,5 @@ FUNC_START(__copy_tofrom_user_base)
/* Default to taking the first of any alternative feature sections */
test_feature = 1
#endif /* __SELFTESTS_POWERPC_PPC_ASM_H */