Skip to content

Commit

Permalink
ftrace/samples: add s390 support for ftrace direct multi sample
Browse files Browse the repository at this point in the history
Add s390 architecture support for the ftrace direct multi sample.
See commit 5fae941 ("ftrace/samples: Add multi direct interface
test module") for further details.

Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Heiko Carstens <[email protected]>
  • Loading branch information
hcahca committed Nov 18, 2021
1 parent 503e451 commit 890e3dc
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/s390/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ config S390
select HAVE_RELIABLE_STACKTRACE
select HAVE_RSEQ
select HAVE_SAMPLE_FTRACE_DIRECT
select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
select HAVE_SOFTIRQ_ON_OWN_STACK
select HAVE_SYSCALL_TRACEPOINTS
select HAVE_VIRT_CPU_ACCOUNTING
Expand Down
30 changes: 30 additions & 0 deletions samples/ftrace/ftrace-direct-multi.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <linux/mm.h> /* for handle_mm_fault() */
#include <linux/ftrace.h>
#include <linux/sched/stat.h>
#include <asm/asm-offsets.h>

extern void my_direct_func(unsigned long ip);

Expand All @@ -14,6 +15,8 @@ void my_direct_func(unsigned long ip)

extern void my_tramp(void *);

#ifdef CONFIG_X86_64

asm (
" .pushsection .text, \"ax\", @progbits\n"
" .type my_tramp, @function\n"
Expand All @@ -31,6 +34,33 @@ asm (
" .popsection\n"
);

#endif /* CONFIG_X86_64 */

#ifdef CONFIG_S390

asm (
" .pushsection .text, \"ax\", @progbits\n"
" .type my_tramp, @function\n"
" .globl my_tramp\n"
" my_tramp:"
" lgr %r1,%r15\n"
" stmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n"
" stg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n"
" aghi %r15,"__stringify(-STACK_FRAME_OVERHEAD)"\n"
" stg %r1,"__stringify(__SF_BACKCHAIN)"(%r15)\n"
" lgr %r2,%r0\n"
" brasl %r14,my_direct_func\n"
" aghi %r15,"__stringify(STACK_FRAME_OVERHEAD)"\n"
" lmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n"
" lg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n"
" lgr %r1,%r0\n"
" br %r1\n"
" .size my_tramp, .-my_tramp\n"
" .popsection\n"
);

#endif /* CONFIG_S390 */

static struct ftrace_ops direct;

static int __init ftrace_direct_multi_init(void)
Expand Down

0 comments on commit 890e3dc

Please sign in to comment.