summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2014-01-17 11:36:16 +0000
committerRalf Baechle <ralf@linux-mips.org>2014-03-26 23:09:17 +0100
commit6f85cebe49a4cd25a381f356ad51ccc376d00a7c (patch)
treed24ed8dd25c014de73d123cc1eb9a5dee6f93c4c
parente89fb56c8bcf5514cfe7abd7a3dda9e6007b7238 (diff)
downloadop-kernel-dev-6f85cebe49a4cd25a381f356ad51ccc376d00a7c.zip
op-kernel-dev-6f85cebe49a4cd25a381f356ad51ccc376d00a7c.tar.gz
MIPS: lib: csum_partial: Add EVA support
Use EVA specific functions to read and write data to user address space. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
-rw-r--r--arch/mips/lib/csum_partial.S25
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/mips/lib/csum_partial.S b/arch/mips/lib/csum_partial.S
index 62c8768..2e4825e 100644
--- a/arch/mips/lib/csum_partial.S
+++ b/arch/mips/lib/csum_partial.S
@@ -352,6 +352,19 @@ LEAF(csum_partial)
.section __ex_table,"a"; \
PTR 9b, handler; \
.previous; \
+ /* This is enabled in EVA mode */ \
+ .else; \
+ /* If loading from user or storing to user */ \
+ .if ((\from == USEROP) && (type == LD_INSN)) || \
+ ((\to == USEROP) && (type == ST_INSN)); \
+9: __BUILD_EVA_INSN(insn##e, reg, addr); \
+ .section __ex_table,"a"; \
+ PTR 9b, handler; \
+ .previous; \
+ .else; \
+ /* EVA without exception */ \
+ insn reg, addr; \
+ .endif; \
.endif
#undef LOAD
@@ -795,7 +808,19 @@ LEAF(csum_partial)
.endm
LEAF(__csum_partial_copy_kernel)
+#ifndef CONFIG_EVA
FEXPORT(__csum_partial_copy_to_user)
FEXPORT(__csum_partial_copy_from_user)
+#endif
__BUILD_CSUM_PARTIAL_COPY_USER LEGACY_MODE USEROP USEROP 1
END(__csum_partial_copy_kernel)
+
+#ifdef CONFIG_EVA
+LEAF(__csum_partial_copy_to_user)
+__BUILD_CSUM_PARTIAL_COPY_USER EVA_MODE KERNELOP USEROP 0
+END(__csum_partial_copy_to_user)
+
+LEAF(__csum_partial_copy_from_user)
+__BUILD_CSUM_PARTIAL_COPY_USER EVA_MODE USEROP KERNELOP 0
+END(__csum_partial_copy_from_user)
+#endif
OpenPOWER on IntegriCloud