Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #ifndef _ASM_S390_FTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #define _ASM_S390_FTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #define ARCH_SUPPORTS_FTRACE_OPS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #if defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #define MCOUNT_INSN_SIZE	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define MCOUNT_INSN_SIZE	24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #define MCOUNT_RETURN_FIXUP	18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #ifndef __ASSEMBLY__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #ifdef CONFIG_CC_IS_CLANG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) /* https://bugs.llvm.org/show_bug.cgi?id=41424 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define ftrace_return_address(n) 0UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define ftrace_return_address(n) __builtin_return_address(n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) void _mcount(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) void ftrace_caller(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) extern char ftrace_graph_caller_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) extern unsigned long ftrace_plt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) extern void *ftrace_func;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) struct dyn_arch_ftrace { };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define MCOUNT_ADDR ((unsigned long)_mcount)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define FTRACE_ADDR ((unsigned long)ftrace_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define KPROBE_ON_FTRACE_NOP	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define KPROBE_ON_FTRACE_CALL	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) static inline unsigned long ftrace_call_adjust(unsigned long addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	return addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) struct ftrace_insn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	u16 opc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	s32 disp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) static inline void ftrace_generate_nop_insn(struct ftrace_insn *insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #if defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	/* brcl 0,0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	insn->opc = 0xc004;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	insn->disp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	/* jg .+24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	insn->opc = 0xc0f4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	insn->disp = MCOUNT_INSN_SIZE / 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) static inline int is_ftrace_nop(struct ftrace_insn *insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #if defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	if (insn->disp == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	if (insn->disp == MCOUNT_INSN_SIZE / 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) static inline void ftrace_generate_call_insn(struct ftrace_insn *insn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 					     unsigned long ip)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	unsigned long target;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	/* brasl r0,ftrace_caller */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	target = is_module_addr((void *) ip) ? ftrace_plt : FTRACE_ADDR;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	insn->opc = 0xc005;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	insn->disp = (target - ip) / 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  * Even though the system call numbers are identical for s390/s390x a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * different system call table is used for compat tasks. This may lead
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  * to e.g. incorrect or missing trace event sysfs files.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * Therefore simply do not trace compat system calls at all.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * See kernel/trace/trace_syscalls.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	return is_compat_task();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) static inline bool arch_syscall_match_sym_name(const char *sym,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 					       const char *name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	 * Skip __s390_ and __s390x_ prefix - due to compat wrappers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	 * and aliasing some symbols of 64 bit system call functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	 * may get the __s390_ prefix instead of the __s390x_ prefix.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	return !strcmp(sym + 7, name) || !strcmp(sym + 8, name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #endif /* __ASSEMBLY__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #endif /* _ASM_S390_FTRACE_H */