ftrace.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # SPDX-License-Identifier: GPL-2.0-only
  2. clear_trace() { # reset trace output
  3. echo > trace
  4. }
  5. disable_tracing() { # stop trace recording
  6. echo 0 > tracing_on
  7. }
  8. enable_tracing() { # start trace recording
  9. echo 1 > tracing_on
  10. }
  11. reset_tracer() { # reset the current tracer
  12. echo nop > current_tracer
  13. }
  14. reset_trigger_file() {
  15. # remove action triggers first
  16. grep -H ':on[^:]*(' $@ |
  17. while read line; do
  18. cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
  19. file=`echo $line | cut -f1 -d:`
  20. echo "!$cmd" >> $file
  21. done
  22. grep -Hv ^# $@ |
  23. while read line; do
  24. cmd=`echo $line | cut -f2- -d: | cut -f1 -d"["`
  25. file=`echo $line | cut -f1 -d:`
  26. echo "!$cmd" > $file
  27. done
  28. }
  29. reset_trigger() { # reset all current setting triggers
  30. if [ -d events/synthetic ]; then
  31. reset_trigger_file events/synthetic/*/trigger
  32. fi
  33. reset_trigger_file events/*/*/trigger
  34. }
  35. reset_events_filter() { # reset all current setting filters
  36. grep -v ^none events/*/*/filter |
  37. while read line; do
  38. echo 0 > `echo $line | cut -f1 -d:`
  39. done
  40. }
  41. reset_ftrace_filter() { # reset all triggers in set_ftrace_filter
  42. if [ ! -f set_ftrace_filter ]; then
  43. return 0
  44. fi
  45. echo > set_ftrace_filter
  46. grep -v '^#' set_ftrace_filter | while read t; do
  47. tr=`echo $t | cut -d: -f2`
  48. if [ "$tr" = "" ]; then
  49. continue
  50. fi
  51. if ! grep -q "$t" set_ftrace_filter; then
  52. continue;
  53. fi
  54. name=`echo $t | cut -d: -f1 | cut -d' ' -f1`
  55. if [ $tr = "enable_event" -o $tr = "disable_event" ]; then
  56. tr=`echo $t | cut -d: -f2-4`
  57. limit=`echo $t | cut -d: -f5`
  58. else
  59. tr=`echo $t | cut -d: -f2`
  60. limit=`echo $t | cut -d: -f3`
  61. fi
  62. if [ "$limit" != "unlimited" ]; then
  63. tr="$tr:$limit"
  64. fi
  65. echo "!$name:$tr" > set_ftrace_filter
  66. done
  67. }
  68. disable_events() {
  69. echo 0 > events/enable
  70. }
  71. clear_synthetic_events() { # reset all current synthetic events
  72. grep -v ^# synthetic_events |
  73. while read line; do
  74. echo "!$line" >> synthetic_events
  75. done
  76. }
  77. initialize_ftrace() { # Reset ftrace to initial-state
  78. # As the initial state, ftrace will be set to nop tracer,
  79. # no events, no triggers, no filters, no function filters,
  80. # no probes, and tracing on.
  81. disable_tracing
  82. reset_tracer
  83. reset_trigger
  84. reset_events_filter
  85. reset_ftrace_filter
  86. disable_events
  87. [ -f set_event_pid ] && echo > set_event_pid
  88. [ -f set_ftrace_pid ] && echo > set_ftrace_pid
  89. [ -f set_ftrace_notrace ] && echo > set_ftrace_notrace
  90. [ -f set_graph_function ] && echo | tee set_graph_*
  91. [ -f stack_trace_filter ] && echo > stack_trace_filter
  92. [ -f kprobe_events ] && echo > kprobe_events
  93. [ -f uprobe_events ] && echo > uprobe_events
  94. [ -f synthetic_events ] && echo > synthetic_events
  95. [ -f snapshot ] && echo 0 > snapshot
  96. clear_trace
  97. enable_tracing
  98. }