From: pengdonglin <[email protected]>

This patch series addresses two limitations of the funcgraph-retval feature:

1. Previously, return values were printed even for void functions.
2. For return types narrower than a register, high-bit corruption could
   lead to incorrect values.

By leveraging BTF to obtain precise return type information, we now:

1. Suppress output for void functions (eliminating noise)
2. Properly truncate values to match the actual return type width (ensuring
  correctness)

These improvements make funcgraph-retval more accurate and useful.

Before:
 # perf ftrace -G vfs_read --graph-opts retval
 ...
 1)               |    _raw_spin_unlock() {
 1)   0.074 us    |      do_raw_spin_unlock(); /* ret=0x1 */
 1)   0.072 us    |      preempt_count_sub(); /* ret=0x0 */
 1)   0.373 us    |    } /* _raw_spin_unlock ret=0x80000000 */
 1)               |    down_read() {
 1)   0.070 us    |      __cond_resched(); /* ret=0x0 */
 1)   0.069 us    |      preempt_count_add(); /* ret=0x0 */
 1)   0.071 us    |      preempt_count_sub(); /* ret=0x0 */
 1)   0.612 us    |    } /* down_read ret=0x80000000 */
 1)               |    down_write() {
 1)   0.070 us    |      __cond_resched(); /* ret=0x0 */
 1)   0.071 us    |      preempt_count_add(); /* ret=0x0 */
 1)   0.070 us    |      preempt_count_sub(); /* ret=0x0 */
 1)   0.605 us    |    } /* down_write ret=0x80000000 */

After:
 # perf ftrace -G vfs_read --graph-opts retval
 ...
 0)               |    _raw_spin_unlock() {
 0)   0.075 us    |      do_raw_spin_unlock();
 0)   0.075 us    |      preempt_count_sub();
 0)   0.380 us    |    } /* _raw_spin_unlock */
 0)               |    down_read() {
 0)   0.070 us    |      __cond_resched(); /* ret=0x0 */
 0)   0.073 us    |      preempt_count_add();
 0)   0.072 us    |      preempt_count_sub();
 0)   0.586 us    |    } /* down_read */
 0)               |    down_write() {
 0)   0.070 us    |      __cond_resched(); /* ret=0x0 */
 0)   0.072 us    |      preempt_count_add();
 0)   0.072 us    |      preempt_count_sub();
 0)   0.676 us    |    } /* down_write */

Changelog:
v2:
- Update the funcgraph-retval documentation
- Revise the cover letter

v1:
- Link: 
https://lore.kernel.org/all/[email protected]/

pengdonglin (2):
  fgraph: Use BTF to trim and filter return values
  tracing: Update funcgraph-retval documentation

 Documentation/trace/ftrace.rst       | 76 ++++++++++++++++------------
 kernel/trace/trace_functions_graph.c | 64 +++++++++++++++++++----
 2 files changed, 97 insertions(+), 43 deletions(-)

-- 
2.34.1


Reply via email to