summaryrefslogtreecommitdiff
path: root/arch/loongarch/kernel/syscall.c
diff options
context:
space:
mode:
authorHuacai Chen <chenhuacai@loongson.cn>2025-12-08 18:09:17 +0800
committerHuacai Chen <chenhuacai@loongson.cn>2025-12-08 18:09:17 +0800
commit14338e631afd6d4b2c2f8fb7deba786d86c40fad (patch)
treecda6249166126aaa7225bf6b711c55777f23faf6 /arch/loongarch/kernel/syscall.c
parent3f63ac8d287b2199318ee38975ed53894067fb65 (diff)
LoongArch: Adjust system call for 32BIT/64BIT
Adjust system call for both 32BIT and 64BIT, including: add the uapi unistd_{32,64}.h and syscall_table_{32,64}.h inclusion, add sys_mmap2() definition, change the system call entry routines, etc. Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/kernel/syscall.c')
-rw-r--r--arch/loongarch/kernel/syscall.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/loongarch/kernel/syscall.c b/arch/loongarch/kernel/syscall.c
index ab94eb5ce039..1249d82c1cd0 100644
--- a/arch/loongarch/kernel/syscall.c
+++ b/arch/loongarch/kernel/syscall.c
@@ -34,9 +34,22 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len, unsigned long,
return ksys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
}
+SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, unsigned long,
+ prot, unsigned long, flags, unsigned long, fd, unsigned long, offset)
+{
+ if (offset & (~PAGE_MASK >> 12))
+ return -EINVAL;
+
+ return ksys_mmap_pgoff(addr, len, prot, flags, fd, offset >> (PAGE_SHIFT - 12));
+}
+
void *sys_call_table[__NR_syscalls] = {
[0 ... __NR_syscalls - 1] = sys_ni_syscall,
+#ifdef CONFIG_32BIT
+#include <asm/syscall_table_32.h>
+#else
#include <asm/syscall_table_64.h>
+#endif
};
typedef long (*sys_call_fn)(unsigned long, unsigned long,