• M
    perf probe: Do not show non representive lines by perf-probe -L · 499144c8
    Masami Hiramatsu 提交于
    Since perf probe -L shows non representive lines, it can be mislead
    users where user can put probes.  This prevents to show such non
    representive lines so that user can understand which lines user can
    probe.
    
      # perf probe -L kernel_read
      <kernel_read@/build/linux-pvZVvI/linux-5.0.0/fs/read_write.c:0>
            0  ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
               {
            2         mm_segment_t old_fs;
                      ssize_t result;
    
                      old_fs = get_fs();
            6         set_fs(get_ds());
                      /* The cast to a user pointer is valid due to the set_fs() */
            8         result = vfs_read(file, (void __user *)buf, count, pos);
            9         set_fs(old_fs);
           10         return result;
               }
               EXPORT_SYMBOL(kernel_read);
    
    Committer testing:
    
    Before:
    
      # perf probe -L kernel_read
      <kernel_read@/usr/src/debug/kernel-5.3.fc30/linux-5.3.8-200.fc30.x86_64/fs/read_write.c:0>
            0  ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
            1  {
            2         mm_segment_t old_fs;
            3         ssize_t result;
    
            5         old_fs = get_fs();
            6         set_fs(KERNEL_DS);
                      /* The cast to a user pointer is valid due to the set_fs() */
            8         result = vfs_read(file, (void __user *)buf, count, pos);
            9         set_fs(old_fs);
           10         return result;
               }
               EXPORT_SYMBOL(kernel_read);
      #
    
    See the 1, 3, 5 lines? They shouldn't be there, after this patch:
    
      # perf probe -L kernel_read
      <kernel_read@/usr/src/debug/kernel-5.3.fc30/linux-5.3.8-200.fc30.x86_64/fs/read_write.c:0>
            0  ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
               {
            2         mm_segment_t old_fs;
                      ssize_t result;
    
                      old_fs = get_fs();
            6         set_fs(KERNEL_DS);
                      /* The cast to a user pointer is valid due to the set_fs() */
            8         result = vfs_read(file, (void __user *)buf, count, pos);
            9         set_fs(old_fs);
           10         return result;
               }
               EXPORT_SYMBOL(kernel_read);
      #
    Signed-off-by: NMasami Hiramatsu <mhiramat@kernel.org>
    Reported-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
    Link: http://lore.kernel.org/lkml/157406473064.24476.2913278267727587314.stgit@devnote2Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    499144c8
probe-finder.c 48.1 KB