diff options
| -rw-r--r-- | arch/riscv/include/asm/unistd.h | 1 | ||||
| -rw-r--r-- | arch/riscv/include/asm/vdso-syscalls.h | 28 | ||||
| -rw-r--r-- | arch/riscv/include/uapi/asm/syscalls.h | 26 | ||||
| -rw-r--r-- | arch/riscv/kernel/syscall_table.c | 1 | ||||
| -rw-r--r-- | arch/riscv/kernel/vdso/flush_icache.S | 1 |
5 files changed, 27 insertions, 30 deletions
diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h index 9f250ed007cd..2f704a5c4196 100644 --- a/arch/riscv/include/asm/unistd.h +++ b/arch/riscv/include/asm/unistd.h | |||
| @@ -14,3 +14,4 @@ | |||
| 14 | #define __ARCH_HAVE_MMU | 14 | #define __ARCH_HAVE_MMU |
| 15 | #define __ARCH_WANT_SYS_CLONE | 15 | #define __ARCH_WANT_SYS_CLONE |
| 16 | #include <uapi/asm/unistd.h> | 16 | #include <uapi/asm/unistd.h> |
| 17 | #include <uapi/asm/syscalls.h> | ||
diff --git a/arch/riscv/include/asm/vdso-syscalls.h b/arch/riscv/include/asm/vdso-syscalls.h deleted file mode 100644 index a2ccf1894929..000000000000 --- a/arch/riscv/include/asm/vdso-syscalls.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2017 SiFive | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef _ASM_RISCV_VDSO_SYSCALLS_H | ||
| 18 | #define _ASM_RISCV_VDSO_SYSCALLS_H | ||
| 19 | |||
| 20 | #ifdef CONFIG_SMP | ||
| 21 | |||
| 22 | /* These syscalls are only used by the vDSO and are not in the uapi. */ | ||
| 23 | #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15) | ||
| 24 | __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache) | ||
| 25 | |||
| 26 | #endif | ||
| 27 | |||
| 28 | #endif /* _ASM_RISCV_VDSO_H */ | ||
diff --git a/arch/riscv/include/uapi/asm/syscalls.h b/arch/riscv/include/uapi/asm/syscalls.h new file mode 100644 index 000000000000..818655b0d535 --- /dev/null +++ b/arch/riscv/include/uapi/asm/syscalls.h | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | /* | ||
| 3 | * Copyright (C) 2017 SiFive | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef _ASM__UAPI__SYSCALLS_H | ||
| 7 | #define _ASM__UAPI__SYSCALLS_H | ||
| 8 | |||
| 9 | /* | ||
| 10 | * Allows the instruction cache to be flushed from userspace. Despite RISC-V | ||
| 11 | * having a direct 'fence.i' instruction available to userspace (which we | ||
| 12 | * can't trap!), that's not actually viable when running on Linux because the | ||
| 13 | * kernel might schedule a process on another hart. There is no way for | ||
| 14 | * userspace to handle this without invoking the kernel (as it doesn't know the | ||
| 15 | * thread->hart mappings), so we've defined a RISC-V specific system call to | ||
| 16 | * flush the instruction cache. | ||
| 17 | * | ||
| 18 | * __NR_riscv_flush_icache is defined to flush the instruction cache over an | ||
| 19 | * address range, with the flush applying to either all threads or just the | ||
| 20 | * caller. We don't currently do anything with the address range, that's just | ||
| 21 | * in there for forwards compatibility. | ||
| 22 | */ | ||
| 23 | #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15) | ||
| 24 | __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache) | ||
| 25 | |||
| 26 | #endif | ||
diff --git a/arch/riscv/kernel/syscall_table.c b/arch/riscv/kernel/syscall_table.c index a5bd6401f95e..ade52b903a43 100644 --- a/arch/riscv/kernel/syscall_table.c +++ b/arch/riscv/kernel/syscall_table.c | |||
| @@ -23,5 +23,4 @@ | |||
| 23 | void *sys_call_table[__NR_syscalls] = { | 23 | void *sys_call_table[__NR_syscalls] = { |
| 24 | [0 ... __NR_syscalls - 1] = sys_ni_syscall, | 24 | [0 ... __NR_syscalls - 1] = sys_ni_syscall, |
| 25 | #include <asm/unistd.h> | 25 | #include <asm/unistd.h> |
| 26 | #include <asm/vdso-syscalls.h> | ||
| 27 | }; | 26 | }; |
diff --git a/arch/riscv/kernel/vdso/flush_icache.S b/arch/riscv/kernel/vdso/flush_icache.S index b0fbad74e873..023e4d4aef58 100644 --- a/arch/riscv/kernel/vdso/flush_icache.S +++ b/arch/riscv/kernel/vdso/flush_icache.S | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
| 15 | #include <asm/unistd.h> | 15 | #include <asm/unistd.h> |
| 16 | #include <asm/vdso-syscalls.h> | ||
| 17 | 16 | ||
| 18 | .text | 17 | .text |
| 19 | /* int __vdso_flush_icache(void *start, void *end, unsigned long flags); */ | 18 | /* int __vdso_flush_icache(void *start, void *end, unsigned long flags); */ |
