Skip to content
  • Thomas Richter's avatar
    perf probe: Add ustring support for perf probe command · 1873f154
    Thomas Richter authored
    Kernel commit 88903c46
    
     ("tracing/probe: Add ustring type for user-space string")
    adds support for user-space strings when type 'ustring' is specified.
    
    Here is an example using sysfs command line interface
    for kprobes:
    
    Function to probe:
      struct filename *
      getname_flags(const char __user *filename, int flags, int *empty)
    
    Setup:
      # cd /sys/kernel/debug/tracing/
      # echo 'p:tmr1 getname_flags +0(%r2):ustring' > kprobe_events
      # cat events/kprobes/tmr1/format | fgrep print
      print fmt: "(%lx) arg1=\"%s\"", REC->__probe_ip, REC->arg1
      # echo 1 > events/kprobes/tmr1/enable
      # touch /tmp/111
      # echo 0 > events/kprobes/tmr1/enable
      # cat trace|fgrep /tmp/111
      touch-5846  [005] d..2 255520.717960: tmr1:\
    	  (getname_flags+0x0/0x400) arg1="/tmp/111"
    
    Doing the same with the perf tool fails.
    Using type 'string' succeeds:
     # perf probe "vfs_getname=getname_flags:72 pathname=filename:string"
     Added new event:
       probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
       ....
     # perf probe -d probe:vfs_getname
     Removed event: probe:vfs_getname
    
    However using type 'ustring' fails (output before):
     # perf probe "vfs_getname=getname_flags:72 pathname=filename:ustring"
     Failed to write event: Invalid argument
       Error: Failed to add events.
     #
    
    Fix this by adding type 'ustring' in function
    convert_variable_type().
    
    Using ustring succeeds (output after):
     # ./perf probe "vfs_getname=getname_flags:72 pathname=filename:ustring"
     Added new event:
       probe:vfs_getname (on getname_flags:72 with pathname=filename:ustring)
    
     You can now use it in all perf tools, such as:
    
    	perf record -e probe:vfs_getname -aR sleep 1
    
     #
    
    Note: This issue also exists on x86, it is not s390 specific.
    
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: sumanthk@linux.ibm.com
    Link: http://lore.kernel.org/lkml/20200120132011.64698-2-tmricht@linux.ibm.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    1873f154