Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'trace-v5.16-rc2-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
"Two fixes to event pid filtering:

- Make sure newly created events reflect the current state of pid
filtering

- Take pid filtering into account when recording trigger events.
(Also clean up the if statement to be cleaner)"

* tag 'trace-v5.16-rc2-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
tracing: Fix pid filtering when triggers are attached
tracing: Check pid filtering when creating events

+30 -6
+18 -6
kernel/trace/trace.h
··· 1366 1366 if (eflags & EVENT_FILE_FL_TRIGGER_COND) 1367 1367 *tt = event_triggers_call(file, buffer, entry, event); 1368 1368 1369 - if (test_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags) || 1370 - (unlikely(file->flags & EVENT_FILE_FL_FILTERED) && 1371 - !filter_match_preds(file->filter, entry))) { 1372 - __trace_event_discard_commit(buffer, event); 1373 - return true; 1374 - } 1369 + if (likely(!(file->flags & (EVENT_FILE_FL_SOFT_DISABLED | 1370 + EVENT_FILE_FL_FILTERED | 1371 + EVENT_FILE_FL_PID_FILTER)))) 1372 + return false; 1373 + 1374 + if (file->flags & EVENT_FILE_FL_SOFT_DISABLED) 1375 + goto discard; 1376 + 1377 + if (file->flags & EVENT_FILE_FL_FILTERED && 1378 + !filter_match_preds(file->filter, entry)) 1379 + goto discard; 1380 + 1381 + if ((file->flags & EVENT_FILE_FL_PID_FILTER) && 1382 + trace_event_ignore_this_pid(file)) 1383 + goto discard; 1375 1384 1376 1385 return false; 1386 + discard: 1387 + __trace_event_discard_commit(buffer, event); 1388 + return true; 1377 1389 } 1378 1390 1379 1391 /**
+12
kernel/trace/trace_events.c
··· 2678 2678 trace_create_new_event(struct trace_event_call *call, 2679 2679 struct trace_array *tr) 2680 2680 { 2681 + struct trace_pid_list *no_pid_list; 2682 + struct trace_pid_list *pid_list; 2681 2683 struct trace_event_file *file; 2684 + unsigned int first; 2682 2685 2683 2686 file = kmem_cache_alloc(file_cachep, GFP_TRACE); 2684 2687 if (!file) 2685 2688 return NULL; 2689 + 2690 + pid_list = rcu_dereference_protected(tr->filtered_pids, 2691 + lockdep_is_held(&event_mutex)); 2692 + no_pid_list = rcu_dereference_protected(tr->filtered_no_pids, 2693 + lockdep_is_held(&event_mutex)); 2694 + 2695 + if (!trace_pid_list_first(pid_list, &first) || 2696 + !trace_pid_list_first(pid_list, &first)) 2697 + file->flags |= EVENT_FILE_FL_PID_FILTER; 2686 2698 2687 2699 file->event_call = call; 2688 2700 file->tr = tr;