File tree Expand file tree Collapse file tree 6 files changed +152
-0
lines changed Expand file tree Collapse file tree 6 files changed +152
-0
lines changed Original file line number Diff line number Diff line change @@ -120,6 +120,8 @@ config LOONGARCH
120120 select HAVE_PERF_USER_STACK_DUMP
121121 select HAVE_REGS_AND_STACK_ACCESS_API
122122 select HAVE_RSEQ
123+ select HAVE_SAMPLE_FTRACE_DIRECT
124+ select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
123125 select HAVE_SETUP_PER_CPU_AREA if NUMA
124126 select HAVE_STACKPROTECTOR
125127 select HAVE_SYSCALL_TRACEPOINTS
Original file line number Diff line number Diff line change 9696
9797#endif /* CONFIG_S390 */
9898
99+ #ifdef CONFIG_LOONGARCH
100+
101+ asm (
102+ " .pushsection .text, \"ax\", @progbits\n"
103+ " .type my_tramp1, @function\n"
104+ " .globl my_tramp1\n"
105+ " my_tramp1:\n"
106+ " addi.d $sp, $sp, -16\n"
107+ " st.d $t0, $sp, 0\n"
108+ " st.d $ra, $sp, 8\n"
109+ " bl my_direct_func1\n"
110+ " ld.d $t0, $sp, 0\n"
111+ " ld.d $ra, $sp, 8\n"
112+ " addi.d $sp, $sp, 16\n"
113+ " jr $t0\n"
114+ " .size my_tramp1, .-my_tramp1\n"
115+
116+ " .type my_tramp2, @function\n"
117+ " .globl my_tramp2\n"
118+ " my_tramp2:\n"
119+ " addi.d $sp, $sp, -16\n"
120+ " st.d $t0, $sp, 0\n"
121+ " st.d $ra, $sp, 8\n"
122+ " bl my_direct_func2\n"
123+ " ld.d $t0, $sp, 0\n"
124+ " ld.d $ra, $sp, 8\n"
125+ " addi.d $sp, $sp, 16\n"
126+ " jr $t0\n"
127+ " .size my_tramp2, .-my_tramp2\n"
128+ " .popsection\n"
129+ );
130+
131+ #endif /* CONFIG_LOONGARCH */
132+
99133static unsigned long my_tramp = (unsigned long )my_tramp1 ;
100134static unsigned long tramps [2 ] = {
101135 (unsigned long )my_tramp1 ,
Original file line number Diff line number Diff line change @@ -103,6 +103,47 @@ asm (
103103
104104#endif /* CONFIG_S390 */
105105
106+ #ifdef CONFIG_LOONGARCH
107+ #include <asm/asm.h>
108+
109+ asm (
110+ " .pushsection .text, \"ax\", @progbits\n"
111+ " .type my_tramp1, @function\n"
112+ " .globl my_tramp1\n"
113+ " my_tramp1:\n"
114+ " addi.d $sp, $sp, -32\n"
115+ " st.d $a0, $sp, 0\n"
116+ " st.d $t0, $sp, 8\n"
117+ " st.d $ra, $sp, 16\n"
118+ " move $a0, $t0\n"
119+ " bl my_direct_func1\n"
120+ " ld.d $a0, $sp, 0\n"
121+ " ld.d $t0, $sp, 8\n"
122+ " ld.d $ra, $sp, 16\n"
123+ " addi.d $sp, $sp, 32\n"
124+ " jr $t0\n"
125+ " .size my_tramp1, .-my_tramp1\n"
126+
127+ " .type my_tramp2, @function\n"
128+ " .globl my_tramp2\n"
129+ " my_tramp2:\n"
130+ " addi.d $sp, $sp, -32\n"
131+ " st.d $a0, $sp, 0\n"
132+ " st.d $t0, $sp, 8\n"
133+ " st.d $ra, $sp, 16\n"
134+ " move $a0, $t0\n"
135+ " bl my_direct_func2\n"
136+ " ld.d $a0, $sp, 0\n"
137+ " ld.d $t0, $sp, 8\n"
138+ " ld.d $ra, $sp, 16\n"
139+ " addi.d $sp, $sp, 32\n"
140+ " jr $t0\n"
141+ " .size my_tramp2, .-my_tramp2\n"
142+ " .popsection\n"
143+ );
144+
145+ #endif /* CONFIG_LOONGARCH */
146+
106147static unsigned long my_tramp = (unsigned long )my_tramp1 ;
107148static unsigned long tramps [2 ] = {
108149 (unsigned long )my_tramp1 ,
Original file line number Diff line number Diff line change 6666
6767#endif /* CONFIG_S390 */
6868
69+ #ifdef CONFIG_LOONGARCH
70+
71+ #include <asm/asm.h>
72+ asm (
73+ " .pushsection .text, \"ax\", @progbits\n"
74+ " .type my_tramp, @function\n"
75+ " .globl my_tramp\n"
76+ " my_tramp:\n"
77+ " addi.d $sp, $sp, -32\n"
78+ " st.d $a0, $sp, 0\n"
79+ " st.d $t0, $sp, 8\n"
80+ " st.d $ra, $sp, 16\n"
81+ " move $a0, $t0\n"
82+ " bl my_direct_func\n"
83+ " ld.d $a0, $sp, 0\n"
84+ " ld.d $t0, $sp, 8\n"
85+ " ld.d $ra, $sp, 16\n"
86+ " addi.d $sp, $sp, 32\n"
87+ " jr $t0\n"
88+ " .size my_tramp, .-my_tramp\n"
89+ " .popsection\n"
90+ );
91+
92+ #endif /* CONFIG_LOONGARCH */
93+
6994static struct ftrace_ops direct ;
7095
7196static int __init ftrace_direct_multi_init (void )
Original file line number Diff line number Diff line change 7070
7171#endif /* CONFIG_S390 */
7272
73+ #ifdef CONFIG_LOONGARCH
74+
75+ asm (
76+ " .pushsection .text, \"ax\", @progbits\n"
77+ " .type my_tramp, @function\n"
78+ " .globl my_tramp\n"
79+ " my_tramp:\n"
80+ " addi.d $sp, $sp, -48\n"
81+ " st.d $a0, $sp, 0\n"
82+ " st.d $a1, $sp, 8\n"
83+ " st.d $a2, $sp, 16\n"
84+ " st.d $t0, $sp, 24\n"
85+ " st.d $ra, $sp, 32\n"
86+ " bl my_direct_func\n"
87+ " ld.d $a0, $sp, 0\n"
88+ " ld.d $a1, $sp, 8\n"
89+ " ld.d $a2, $sp, 16\n"
90+ " ld.d $t0, $sp, 24\n"
91+ " ld.d $ra, $sp, 32\n"
92+ " addi.d $sp, $sp, 48\n"
93+ " jr $t0\n"
94+ " .size my_tramp, .-my_tramp\n"
95+ " .popsection\n"
96+ );
97+
98+ #endif /* CONFIG_LOONGARCH */
99+
73100static int __init ftrace_direct_init (void )
74101{
75102 return register_ftrace_direct ((unsigned long )handle_mm_fault ,
Original file line number Diff line number Diff line change 6363
6464#endif /* CONFIG_S390 */
6565
66+ #ifdef CONFIG_LOONGARCH
67+
68+ asm (
69+ " .pushsection .text, \"ax\", @progbits\n"
70+ " .type my_tramp, @function\n"
71+ " .globl my_tramp\n"
72+ " my_tramp:\n"
73+ " addi.d $sp, $sp, -32\n"
74+ " st.d $a0, $sp, 0\n"
75+ " st.d $t0, $sp, 8\n"
76+ " st.d $ra, $sp, 16\n"
77+ " bl my_direct_func\n"
78+ " ld.d $a0, $sp, 0\n"
79+ " ld.d $t0, $sp, 8\n"
80+ " ld.d $ra, $sp, 16\n"
81+ " addi.d $sp, $sp, 32\n"
82+ " jr $t0\n"
83+ " .size my_tramp, .-my_tramp\n"
84+ " .popsection\n"
85+ );
86+
87+ #endif /* CONFIG_LOONGARCH */
88+
6689static int __init ftrace_direct_init (void )
6790{
6891 return register_ftrace_direct ((unsigned long )wake_up_process ,
You can’t perform that action at this time.
0 commit comments