summary refs log tree commit diff
diff options
context:
space:
mode:
authorHans-Christian Noren Egtvedt <egtvedt@samfundet.no>2016-05-29 21:11:53 +0200
committerHans-Christian Noren Egtvedt <egtvedt@samfundet.no>2016-07-29 11:55:57 +0200
commit389ce5a9616b5c2ae386a1fde7401762a4ed1b37 (patch)
tree9f89ef7dad5cdeb7bed996de6b1784b52de397ea
parent523d939ef98fd712632d93a5a2b588e477a7565e (diff)
downloadlinux-389ce5a9616b5c2ae386a1fde7401762a4ed1b37.tar.gz
avr32: wire up preadv2 and pwritev2 syscalls
This patch wires up the new preadv2 and pwritev2 syscall on AVR32.

On AVR32, all parameters beyond the 5th are passed on the stack. System
calls don't use the stack -- they borrow a callee-saved register
instead. This means that syscalls that take 6 parameters must be called
through a stub that pushes the last parameter on the stack.

Signed-off-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no>
-rw-r--r--arch/avr32/include/uapi/asm/unistd.h2
-rw-r--r--arch/avr32/kernel/syscall-stubs.S18
-rw-r--r--arch/avr32/kernel/syscall_table.S2
3 files changed, 22 insertions, 0 deletions
diff --git a/arch/avr32/include/uapi/asm/unistd.h b/arch/avr32/include/uapi/asm/unistd.h
index 60c0f3afc1f9..d0c1f6db4b8f 100644
--- a/arch/avr32/include/uapi/asm/unistd.h
+++ b/arch/avr32/include/uapi/asm/unistd.h
@@ -338,5 +338,7 @@
 #define __NR_membarrier		323
 #define __NR_mlock2		324
 #define __NR_copy_file_range    325
+#define __NR_preadv2            326
+#define __NR_pwritev2           327
 
 #endif /* _UAPI__ASM_AVR32_UNISTD_H */
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S
index cb3991552f14..cb256534ed92 100644
--- a/arch/avr32/kernel/syscall-stubs.S
+++ b/arch/avr32/kernel/syscall-stubs.S
@@ -133,3 +133,21 @@ __sys_copy_file_range:
 	call	sys_copy_file_range
 	sub	sp, -4
 	popm	pc
+
+	.global __sys_preadv2
+	.type	__sys_preadv2,@function
+__sys_preadv2:
+	pushm	lr
+	st.w	--sp, ARG6
+	call	sys_preadv2
+	sub	sp, -4
+	popm	pc
+
+	.global __sys_pwritev2
+	.type	__sys_pwritev2,@function
+__sys_pwritev2:
+	pushm	lr
+	st.w	--sp, ARG6
+	call	sys_pwritev2
+	sub	sp, -4
+	popm	pc
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S
index 64d71a781fa8..0eaf94b7a67c 100644
--- a/arch/avr32/kernel/syscall_table.S
+++ b/arch/avr32/kernel/syscall_table.S
@@ -339,4 +339,6 @@ sys_call_table:
 	.long	sys_membarrier
 	.long	sys_mlock2
 	.long   __sys_copy_file_range   /* 325 */
+	.long   __sys_preadv2
+	.long   __sys_pwritev2
 	.long	sys_ni_syscall		/* r8 is saturated at nr_syscalls */