lkml.org 
[lkml]   [2022]   [Mar]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 3/3] tracing: make tp_printk work on syscall tracepoints
Date
Adding printk for syscall tracepoints for the tp_printk work.

Signed-off-by: Jeff Xie <xiehuan09@gmail.com>
---
kernel/trace/trace_syscalls.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)

diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index f755bde42fd0..9798122166d3 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -290,6 +290,25 @@ static int __init syscall_enter_define_fields(struct trace_event_call *call)
return ret;
}

+static void syscall_output_printk(struct trace_entry *ent,
+ struct trace_event_file *trace_file, struct trace_array *tr)
+{
+ unsigned long flags;
+ struct trace_iterator *iter = tracepoint_print_iter;
+ struct trace_event *event = &trace_file->event_call->event;
+
+ spin_lock_irqsave(&tracepoint_iter_lock, flags);
+
+ trace_seq_init(&iter->seq);
+ iter->ent = ent;
+ iter->tr = tr;
+ event->funcs->trace(iter, 0, event);
+ trace_seq_putc(&iter->seq, 0);
+ pr_info("%s", iter->seq.buffer);
+
+ spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
+}
+
static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
{
struct trace_array *tr = data;
@@ -333,6 +352,9 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
syscall_get_arguments(current, regs, args);
memcpy(entry->args, args, sizeof(unsigned long) * sys_data->nb_args);

+ if (static_key_false(&tracepoint_printk_key.key))
+ syscall_output_printk(&entry->ent, trace_file, tr);
+
event_trigger_unlock_commit(trace_file, buffer, event, entry,
trace_ctx);
}
@@ -376,6 +398,9 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
entry->nr = syscall_nr;
entry->ret = syscall_get_return_value(current, regs);

+ if (static_key_false(&tracepoint_printk_key.key))
+ syscall_output_printk(&entry->ent, trace_file, tr);
+
event_trigger_unlock_commit(trace_file, buffer, event, entry,
trace_ctx);
}
--
2.25.1
\
 
 \ /
  Last update: 2022-03-29 18:40    [W:0.056 / U:0.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site