Skip to content

Commit 8968422

Browse files
committed
hexagon: fix fadvise64_64 calling conventions
fadvise64_64() has two 64-bit arguments at the wrong alignment for hexagon, which turns them into a 7-argument syscall that is not supported by Linux. The downstream musl port for hexagon actually asks for a 6-argument version the same way we do it on arm, csky, powerpc, so make the kernel do it the same way to avoid having to change both. Link: https://github.com/quic/musl/blob/hexagon/arch/hexagon/syscall_arch.h#L78 Cc: stable@vger.kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de>
1 parent 3339b99 commit 8968422

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
3+
#include <asm-generic/syscalls.h>
4+
5+
asmlinkage long sys_hexagon_fadvise64_64(int fd, int advice,
6+
u32 a2, u32 a3, u32 a4, u32 a5);

arch/hexagon/kernel/syscalltab.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
#undef __SYSCALL
1515
#define __SYSCALL(nr, call) [nr] = (call),
1616

17+
SYSCALL_DEFINE6(hexagon_fadvise64_64, int, fd, int, advice,
18+
SC_ARG64(offset), SC_ARG64(len))
19+
{
20+
return ksys_fadvise64_64(fd, SC_VAL64(loff_t, offset), SC_VAL64(loff_t, len), advice);
21+
}
22+
#define sys_fadvise64_64 sys_hexagon_fadvise64_64
23+
1724
void *sys_call_table[__NR_syscalls] = {
1825
#include <asm/unistd.h>
1926
};

0 commit comments

Comments
 (0)