aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans-Christian Noren Egtvedt <egtvedt@samfundet.no>2016-05-29 15:11:53 -0400
committerHans-Christian Noren Egtvedt <egtvedt@samfundet.no>2016-07-29 05:55:57 -0400
commit389ce5a9616b5c2ae386a1fde7401762a4ed1b37 (patch)
tree9f89ef7dad5cdeb7bed996de6b1784b52de397ea
parent523d939ef98fd712632d93a5a2b588e477a7565e (diff)
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 @@
338#define __NR_membarrier 323 338#define __NR_membarrier 323
339#define __NR_mlock2 324 339#define __NR_mlock2 324
340#define __NR_copy_file_range 325 340#define __NR_copy_file_range 325
341#define __NR_preadv2 326
342#define __NR_pwritev2 327
341 343
342#endif /* _UAPI__ASM_AVR32_UNISTD_H */ 344#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:
133 call sys_copy_file_range 133 call sys_copy_file_range
134 sub sp, -4 134 sub sp, -4
135 popm pc 135 popm pc
136
137 .global __sys_preadv2
138 .type __sys_preadv2,@function
139__sys_preadv2:
140 pushm lr
141 st.w --sp, ARG6
142 call sys_preadv2
143 sub sp, -4
144 popm pc
145
146 .global __sys_pwritev2
147 .type __sys_pwritev2,@function
148__sys_pwritev2:
149 pushm lr
150 st.w --sp, ARG6
151 call sys_pwritev2
152 sub sp, -4
153 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:
339 .long sys_membarrier 339 .long sys_membarrier
340 .long sys_mlock2 340 .long sys_mlock2
341 .long __sys_copy_file_range /* 325 */ 341 .long __sys_copy_file_range /* 325 */
342 .long __sys_preadv2
343 .long __sys_pwritev2
342 .long sys_ni_syscall /* r8 is saturated at nr_syscalls */ 344 .long sys_ni_syscall /* r8 is saturated at nr_syscalls */