hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/kernel/trace/trace_syscalls.c
....@@ -298,8 +298,9 @@
298298 struct syscall_metadata *sys_data;
299299 struct ring_buffer_event *event;
300300 struct trace_buffer *buffer;
301
- unsigned int trace_ctx;
301
+ unsigned long irq_flags;
302302 unsigned long args[6];
303
+ int pc;
303304 int syscall_nr;
304305 int size;
305306
....@@ -321,11 +322,12 @@
321322
322323 size = sizeof(*entry) + sizeof(unsigned long) * sys_data->nb_args;
323324
324
- trace_ctx = tracing_gen_ctx();
325
+ local_save_flags(irq_flags);
326
+ pc = preempt_count();
325327
326328 buffer = tr->array_buffer.buffer;
327329 event = trace_buffer_lock_reserve(buffer,
328
- sys_data->enter_event->event.type, size, trace_ctx);
330
+ sys_data->enter_event->event.type, size, irq_flags, pc);
329331 if (!event)
330332 return;
331333
....@@ -335,7 +337,7 @@
335337 memcpy(entry->args, args, sizeof(unsigned long) * sys_data->nb_args);
336338
337339 event_trigger_unlock_commit(trace_file, buffer, event, entry,
338
- trace_ctx);
340
+ irq_flags, pc);
339341 }
340342
341343 static void ftrace_syscall_exit(void *data, struct pt_regs *regs, long ret)
....@@ -346,7 +348,8 @@
346348 struct syscall_metadata *sys_data;
347349 struct ring_buffer_event *event;
348350 struct trace_buffer *buffer;
349
- unsigned int trace_ctx;
351
+ unsigned long irq_flags;
352
+ int pc;
350353 int syscall_nr;
351354
352355 syscall_nr = trace_get_syscall_nr(current, regs);
....@@ -365,12 +368,13 @@
365368 if (!sys_data)
366369 return;
367370
368
- trace_ctx = tracing_gen_ctx();
371
+ local_save_flags(irq_flags);
372
+ pc = preempt_count();
369373
370374 buffer = tr->array_buffer.buffer;
371375 event = trace_buffer_lock_reserve(buffer,
372376 sys_data->exit_event->event.type, sizeof(*entry),
373
- trace_ctx);
377
+ irq_flags, pc);
374378 if (!event)
375379 return;
376380
....@@ -379,7 +383,7 @@
379383 entry->ret = syscall_get_return_value(current, regs);
380384
381385 event_trigger_unlock_commit(trace_file, buffer, event, entry,
382
- trace_ctx);
386
+ irq_flags, pc);
383387 }
384388
385389 static int reg_event_syscall_enter(struct trace_event_file *file,