Patch "selftests/ftrace: Fix event filter target_func selection" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    selftests/ftrace: Fix event filter target_func selection

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     selftests-ftrace-fix-event-filter-target_func-select.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ca97542992f6429d5b66fea721dd9b4a72d0e8cb
Author: Mark Rutland <mark.rutland@xxxxxxx>
Date:   Wed Mar 20 14:18:44 2024 +0000

    selftests/ftrace: Fix event filter target_func selection
    
    [ Upstream commit 8ecab2e64572f1aecdfc5a8feae748abda6e3347 ]
    
    The event filter function test has been failing in our internal test
    farm:
    
    | # not ok 33 event filter function - test event filtering on functions
    
    Running the test in verbose mode indicates that this is because the test
    erroneously determines that kmem_cache_free() is the most common caller
    of kmem_cache_free():
    
      # # + cut -d: -f3 trace
      # # + sed s/call_site=([^+]*)+0x.*/1/
      # # + sort
      # # + uniq -c
      # # + sort
      # # + tail -n 1
      # # + sed s/^[ 0-9]*//
      # # + target_func=kmem_cache_free
    
    ... and as kmem_cache_free() doesn't call itself, setting this as the
    filter function for kmem_cache_free() results in no hits, and
    consequently the test fails:
    
      # # + grep kmem_cache_free trace
      # # + grep kmem_cache_free
      # # + wc -l
      # # + hitcnt=0
      # # + grep kmem_cache_free trace
      # # + grep -v kmem_cache_free
      # # + wc -l
      # # + misscnt=0
      # # + [ 0 -eq 0 ]
      # # + exit_fail
    
    This seems to be because the system in question has tasks with ':' in
    their name (which a number of kernel worker threads have). These show up
    in the trace, e.g.
    
      test:.sh-1299    [004] .....  2886.040608: kmem_cache_free: call_site=putname+0xa4/0xc8 ptr=000000000f4d22f4 name=names_cache
    
    ... and so when we try to extact the call_site with:
    
      cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/'
    
    ... the 'cut' command will extrace the column containing
    'kmem_cache_free' rather than the column containing 'call_site=...', and
    the 'sed' command will leave this unchanged. Consequently, the test will
    decide to use 'kmem_cache_free' as the filter function, resulting in the
    failure seen above.
    
    Fix this by matching the 'call_site=<func>' part specifically to extract
    the function name.
    
    Signed-off-by: Mark Rutland <mark.rutland@xxxxxxx>
    Reported-by: Aishwarya TCV <aishwarya.tcv@xxxxxxx>
    Cc: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
    Cc: Shuah Khan <shuah@xxxxxxxxxx>
    Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
    Cc: linux-kernel@xxxxxxxxxxxxxxx
    Cc: linux-kselftest@xxxxxxxxxxxxxxx
    Cc: linux-trace-kernel@xxxxxxxxxxxxxxx
    Acked-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
    Signed-off-by: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc b/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc
index 2de7c61d1ae30..3f74c09c56b62 100644
--- a/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc
+++ b/tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc
@@ -24,7 +24,7 @@ echo 0 > events/enable
 echo "Get the most frequently calling function"
 sample_events
 
-target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
+target_func=`cat trace | grep -o 'call_site=\([^+]*\)' | sed 's/call_site=//' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
 if [ -z "$target_func" ]; then
     exit_fail
 fi




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux