mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 07:38:10 +00:00
35b51afd23
* Support for the Svpbmt extension, which allows memory attributes to be encoded in pages. * Support for the Allwinner D1's implementation of page-based memory attributes. * Support for running rv32 binaries on rv64 systems, via the compat subsystem. * Support for kexec_file(). * Support for the new generic ticket-based spinlocks, which allows us to also move to qrwlock. These should have already gone in through the asm-geneic tree as well. * A handful of cleanups and fixes, include some larger ones around atomics and XIP. -----BEGIN PGP SIGNATURE----- iQJHBAABCAAxFiEEKzw3R0RoQ7JKlDp6LhMZ81+7GIkFAmKWOx8THHBhbG1lckBk YWJiZWx0LmNvbQAKCRAuExnzX7sYieAiEADAUdP7ctoaSQwk5skd/fdA3b4KJuKn 1Zjl+Br32WP0DlbirYBYWRUQZnCCsvABbTiwSJMcG7NBpU5pyQ5XDtB3OA5kJswO Fdp8Nd53//+GK1M5zdEM9OdgvT9fbfTZ3qTu8bKsROOQhGwnYL+Csc9KjFRqEmzN oQii0jlb3n5PM4FL3GsbV4uMn9zzkP9mnVAPQktcock2EKFEK/Fy3uNYMQiO2KPi n8O6bIDaeRdQ6SurzWOuOkt0cro0tEF85ilzT04mynQsOU0el5oGqCxnOhNH3VWg ndqPT6Yafw12hZOtbKJeP+nF8IIR6aJLP3jOtRwEVgcfbXYAw4QwbAV8kQZISefN ipn8JGY7GX9Y9TYU692OUGkcmAb3/dxb6c0WihBdvJ0M6YyLD5X+YKHNuG2onLgK ss43C5Mxsu629rsjdu/PV91B1+pve3rG9siVmF+g4eo0x9rjMq6/JB0Kal/8SLI1 Je5T55d5ujV1a2XxhZLQOSD5owrK7J1M9owb0bloTnr9nVwFTWDrfEQEU82o3kP+ Xm+FfXktnz9ai55NjkMbbEur5D++dKJhBavwCTnBcTrJmMtEH0R45GTK9ZehP+WC rNVrRXjIsS18wsTfJxnkZeFQA38as6VBKTzvwHvOgzTrrZU1/xk3lpkouYtAO6BG gKacHshVilmUuA== =Loi6 -----END PGP SIGNATURE----- Merge tag 'riscv-for-linus-5.19-mw0' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux Pull RISC-V updates from Palmer Dabbelt: - Support for the Svpbmt extension, which allows memory attributes to be encoded in pages - Support for the Allwinner D1's implementation of page-based memory attributes - Support for running rv32 binaries on rv64 systems, via the compat subsystem - Support for kexec_file() - Support for the new generic ticket-based spinlocks, which allows us to also move to qrwlock. These should have already gone in through the asm-geneic tree as well - A handful of cleanups and fixes, include some larger ones around atomics and XIP * tag 'riscv-for-linus-5.19-mw0' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: (51 commits) RISC-V: Prepare dropping week attribute from arch_kexec_apply_relocations[_add] riscv: compat: Using seperated vdso_maps for compat_vdso_info RISC-V: Fix the XIP build RISC-V: Split out the XIP fixups into their own file RISC-V: ignore xipImage RISC-V: Avoid empty create_*_mapping definitions riscv: Don't output a bogus mmu-type on a no MMU kernel riscv: atomic: Add custom conditional atomic operation implementation riscv: atomic: Optimize dec_if_positive functions riscv: atomic: Cleanup unnecessary definition RISC-V: Load purgatory in kexec_file RISC-V: Add purgatory RISC-V: Support for kexec_file on panic RISC-V: Add kexec_file support RISC-V: use memcpy for kexec_file mode kexec_file: Fix kexec_file.c build error for riscv platform riscv: compat: Add COMPAT Kbuild skeletal support riscv: compat: ptrace: Add compat_arch_ptrace implement riscv: compat: signal: Add rt_frame implementation riscv: add memory-type errata for T-Head ...
176 lines
5.5 KiB
C
176 lines
5.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_PARISC_UNISTD_H_
|
|
#define _ASM_PARISC_UNISTD_H_
|
|
|
|
#include <uapi/asm/unistd.h>
|
|
|
|
#define __NR_Linux_syscalls __NR_syscalls
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#define SYS_ify(syscall_name) __NR_##syscall_name
|
|
|
|
#define __IGNORE_fadvise64 /* fadvise64_64 */
|
|
|
|
#ifndef ASM_LINE_SEP
|
|
# define ASM_LINE_SEP ;
|
|
#endif
|
|
|
|
/* Definition taken from glibc 2.3.3
|
|
* sysdeps/unix/sysv/linux/hppa/sysdep.h
|
|
*/
|
|
|
|
#ifdef PIC
|
|
/* WARNING: CANNOT BE USED IN A NOP! */
|
|
# define K_STW_ASM_PIC " copy %%r19, %%r4\n"
|
|
# define K_LDW_ASM_PIC " copy %%r4, %%r19\n"
|
|
# define K_USING_GR4 "%r4",
|
|
#else
|
|
# define K_STW_ASM_PIC " \n"
|
|
# define K_LDW_ASM_PIC " \n"
|
|
# define K_USING_GR4
|
|
#endif
|
|
|
|
/* GCC has to be warned that a syscall may clobber all the ABI
|
|
registers listed as "caller-saves", see page 8, Table 2
|
|
in section 2.2.6 of the PA-RISC RUN-TIME architecture
|
|
document. However! r28 is the result and will conflict with
|
|
the clobber list so it is left out. Also the input arguments
|
|
registers r20 -> r26 will conflict with the list so they
|
|
are treated specially. Although r19 is clobbered by the syscall
|
|
we cannot say this because it would violate ABI, thus we say
|
|
r4 is clobbered and use that register to save/restore r19
|
|
across the syscall. */
|
|
|
|
#define K_CALL_CLOB_REGS "%r1", "%r2", K_USING_GR4 \
|
|
"%r20", "%r29", "%r31"
|
|
|
|
#undef K_INLINE_SYSCALL
|
|
#define K_INLINE_SYSCALL(name, nr, args...) ({ \
|
|
long __sys_res; \
|
|
{ \
|
|
register unsigned long __res __asm__("r28"); \
|
|
K_LOAD_ARGS_##nr(args) \
|
|
/* FIXME: HACK stw/ldw r19 around syscall */ \
|
|
__asm__ volatile( \
|
|
K_STW_ASM_PIC \
|
|
" ble 0x100(%%sr2, %%r0)\n" \
|
|
" ldi %1, %%r20\n" \
|
|
K_LDW_ASM_PIC \
|
|
: "=r" (__res) \
|
|
: "i" (SYS_ify(name)) K_ASM_ARGS_##nr \
|
|
: "memory", K_CALL_CLOB_REGS K_CLOB_ARGS_##nr \
|
|
); \
|
|
__sys_res = (long)__res; \
|
|
} \
|
|
__sys_res; \
|
|
})
|
|
|
|
#define K_LOAD_ARGS_0()
|
|
#define K_LOAD_ARGS_1(r26) \
|
|
register unsigned long __r26 __asm__("r26") = (unsigned long)(r26); \
|
|
K_LOAD_ARGS_0()
|
|
#define K_LOAD_ARGS_2(r26,r25) \
|
|
register unsigned long __r25 __asm__("r25") = (unsigned long)(r25); \
|
|
K_LOAD_ARGS_1(r26)
|
|
#define K_LOAD_ARGS_3(r26,r25,r24) \
|
|
register unsigned long __r24 __asm__("r24") = (unsigned long)(r24); \
|
|
K_LOAD_ARGS_2(r26,r25)
|
|
#define K_LOAD_ARGS_4(r26,r25,r24,r23) \
|
|
register unsigned long __r23 __asm__("r23") = (unsigned long)(r23); \
|
|
K_LOAD_ARGS_3(r26,r25,r24)
|
|
#define K_LOAD_ARGS_5(r26,r25,r24,r23,r22) \
|
|
register unsigned long __r22 __asm__("r22") = (unsigned long)(r22); \
|
|
K_LOAD_ARGS_4(r26,r25,r24,r23)
|
|
#define K_LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \
|
|
register unsigned long __r21 __asm__("r21") = (unsigned long)(r21); \
|
|
K_LOAD_ARGS_5(r26,r25,r24,r23,r22)
|
|
|
|
/* Even with zero args we use r20 for the syscall number */
|
|
#define K_ASM_ARGS_0
|
|
#define K_ASM_ARGS_1 K_ASM_ARGS_0, "r" (__r26)
|
|
#define K_ASM_ARGS_2 K_ASM_ARGS_1, "r" (__r25)
|
|
#define K_ASM_ARGS_3 K_ASM_ARGS_2, "r" (__r24)
|
|
#define K_ASM_ARGS_4 K_ASM_ARGS_3, "r" (__r23)
|
|
#define K_ASM_ARGS_5 K_ASM_ARGS_4, "r" (__r22)
|
|
#define K_ASM_ARGS_6 K_ASM_ARGS_5, "r" (__r21)
|
|
|
|
/* The registers not listed as inputs but clobbered */
|
|
#define K_CLOB_ARGS_6
|
|
#define K_CLOB_ARGS_5 K_CLOB_ARGS_6, "%r21"
|
|
#define K_CLOB_ARGS_4 K_CLOB_ARGS_5, "%r22"
|
|
#define K_CLOB_ARGS_3 K_CLOB_ARGS_4, "%r23"
|
|
#define K_CLOB_ARGS_2 K_CLOB_ARGS_3, "%r24"
|
|
#define K_CLOB_ARGS_1 K_CLOB_ARGS_2, "%r25"
|
|
#define K_CLOB_ARGS_0 K_CLOB_ARGS_1, "%r26"
|
|
|
|
#define _syscall0(type,name) \
|
|
type name(void) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 0); \
|
|
}
|
|
|
|
#define _syscall1(type,name,type1,arg1) \
|
|
type name(type1 arg1) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 1, arg1); \
|
|
}
|
|
|
|
#define _syscall2(type,name,type1,arg1,type2,arg2) \
|
|
type name(type1 arg1, type2 arg2) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 2, arg1, arg2); \
|
|
}
|
|
|
|
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
|
|
type name(type1 arg1, type2 arg2, type3 arg3) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 3, arg1, arg2, arg3); \
|
|
}
|
|
|
|
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
|
|
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4); \
|
|
}
|
|
|
|
/* select takes 5 arguments */
|
|
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
|
|
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
|
|
{ \
|
|
return K_INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5); \
|
|
}
|
|
|
|
#define __ARCH_WANT_NEW_STAT
|
|
#define __ARCH_WANT_STAT64
|
|
#define __ARCH_WANT_SYS_ALARM
|
|
#define __ARCH_WANT_SYS_GETHOSTNAME
|
|
#define __ARCH_WANT_SYS_PAUSE
|
|
#define __ARCH_WANT_SYS_SIGNAL
|
|
#define __ARCH_WANT_SYS_TIME32
|
|
#define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
|
|
#define __ARCH_WANT_SYS_UTIME32
|
|
#define __ARCH_WANT_SYS_WAITPID
|
|
#define __ARCH_WANT_SYS_SOCKETCALL
|
|
#define __ARCH_WANT_SYS_FADVISE64
|
|
#define __ARCH_WANT_SYS_GETPGRP
|
|
#define __ARCH_WANT_SYS_NICE
|
|
#define __ARCH_WANT_SYS_SIGPENDING
|
|
#define __ARCH_WANT_SYS_SIGPROCMASK
|
|
#define __ARCH_WANT_SYS_FORK
|
|
#define __ARCH_WANT_SYS_VFORK
|
|
#define __ARCH_WANT_SYS_CLONE
|
|
#define __ARCH_WANT_SYS_CLONE3
|
|
#define __ARCH_WANT_COMPAT_SYS_SENDFILE
|
|
#define __ARCH_WANT_COMPAT_STAT
|
|
|
|
#ifdef CONFIG_64BIT
|
|
#define __ARCH_WANT_SYS_TIME
|
|
#define __ARCH_WANT_SYS_UTIME
|
|
#endif
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#undef STR
|
|
|
|
#endif /* _ASM_PARISC_UNISTD_H_ */
|