|
@@ -306,6 +306,8 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
|
|
|
struct syscall_metadata *sys_data;
|
|
|
struct ring_buffer_event *event;
|
|
|
struct ring_buffer *buffer;
|
|
|
+ unsigned long irq_flags;
|
|
|
+ int pc;
|
|
|
int syscall_nr;
|
|
|
int size;
|
|
|
|
|
@@ -321,9 +323,12 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
|
|
|
|
|
|
size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args;
|
|
|
|
|
|
+ local_save_flags(irq_flags);
|
|
|
+ pc = preempt_count();
|
|
|
+
|
|
|
buffer = tr->trace_buffer.buffer;
|
|
|
event = trace_buffer_lock_reserve(buffer,
|
|
|
- sys_data->enter_event->event.type, size, 0, 0);
|
|
|
+ sys_data->enter_event->event.type, size, irq_flags, pc);
|
|
|
if (!event)
|
|
|
return;
|
|
|
|
|
@@ -333,7 +338,8 @@ static void ftrace_syscall_enter(void *data, struct pt_regs *regs, long id)
|
|
|
|
|
|
if (!filter_current_check_discard(buffer, sys_data->enter_event,
|
|
|
entry, event))
|
|
|
- trace_current_buffer_unlock_commit(buffer, event, 0, 0);
|
|
|
+ trace_current_buffer_unlock_commit(buffer, event,
|
|
|
+ irq_flags, pc);
|
|
|
}
|
|
|
|
|
|
static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
|
|
@@ -343,6 +349,8 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
|
|
|
struct syscall_metadata *sys_data;
|
|
|
struct ring_buffer_event *event;
|
|
|
struct ring_buffer *buffer;
|
|
|
+ unsigned long irq_flags;
|
|
|
+ int pc;
|
|
|
int syscall_nr;
|
|
|
|
|
|
syscall_nr = trace_get_syscall_nr(current, regs);
|
|
@@ -355,9 +363,13 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
|
|
|
if (!sys_data)
|
|
|
return;
|
|
|
|
|
|
+ local_save_flags(irq_flags);
|
|
|
+ pc = preempt_count();
|
|
|
+
|
|
|
buffer = tr->trace_buffer.buffer;
|
|
|
event = trace_buffer_lock_reserve(buffer,
|
|
|
- sys_data->exit_event->event.type, sizeof(*entry), 0, 0);
|
|
|
+ sys_data->exit_event->event.type, sizeof(*entry),
|
|
|
+ irq_flags, pc);
|
|
|
if (!event)
|
|
|
return;
|
|
|
|
|
@@ -367,7 +379,8 @@ static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
|
|
|
|
|
|
if (!filter_current_check_discard(buffer, sys_data->exit_event,
|
|
|
entry, event))
|
|
|
- trace_current_buffer_unlock_commit(buffer, event, 0, 0);
|
|
|
+ trace_current_buffer_unlock_commit(buffer, event,
|
|
|
+ irq_flags, pc);
|
|
|
}
|
|
|
|
|
|
static int reg_event_syscall_enter(struct ftrace_event_file *file,
|