)]}'
{
  "commit": "287b6e68ca7209caec40b2f44f837c580a413bae",
  "tree": "b0867d75868f6049dc5747bd39fdae2d477dde66",
  "parents": [
    "fb52607afcd0629776f1dc9e657647ceae81dd50"
  ],
  "author": {
    "name": "Frederic Weisbecker",
    "email": "fweisbec@gmail.com",
    "time": "Wed Nov 26 00:57:25 2008 +0100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Wed Nov 26 01:59:45 2008 +0100"
  },
  "message": "tracing/function-return-tracer: set a more human readable output\n\nImpact: feature\n\nThis patch sets a C-like output for the function graph tracing.\nFor this aim, we now call two handler for each function: one on the entry\nand one other on return. This way we can draw a well-ordered call stack.\n\nThe pid of the previous trace is loosely stored to be compared against\nthe one of the current trace to see if there were a context switch.\n\nWithout this little feature, the call tree would seem broken at\nsome locations.\nWe could use the sched_tracer to capture these sched_events but this\nway of processing is much more simpler.\n\n2 spaces have been chosen for indentation to fit the screen while deep\ncalls. The time of execution in nanosecs is printed just after closed\nbraces, it seems more easy this way to find the corresponding function.\nIf the time was printed as a first column, it would be not so easy to\nfind the corresponding function if it is called on a deep depth.\n\nI plan to output the return value but on 32 bits CPU, the return value\ncan be 32 or 64, and its difficult to guess on which case we are.\nI don\u0027t know what would be the better solution on X86-32: only print\neax (low-part) or even edx (high-part).\n\nActually it\u0027s thee same problem when a function return a 8 bits value, the\nhigh part of eax could contain junk values...\n\nHere is an example of trace:\n\nsys_read() {\n  fget_light() {\n  } 526\n  vfs_read() {\n    rw_verify_area() {\n      security_file_permission() {\n        cap_file_permission() {\n        } 519\n      } 1564\n    } 2640\n    do_sync_read() {\n      pipe_read() {\n        __might_sleep() {\n        } 511\n        pipe_wait() {\n          prepare_to_wait() {\n          } 760\n          deactivate_task() {\n            dequeue_task() {\n              dequeue_task_fair() {\n                dequeue_entity() {\n                  update_curr() {\n                    update_min_vruntime() {\n                    } 504\n                  } 1587\n                  clear_buddies() {\n                  } 512\n                  add_cfs_task_weight() {\n                  } 519\n                  update_min_vruntime() {\n                  } 511\n                } 5602\n                dequeue_entity() {\n                  update_curr() {\n                    update_min_vruntime() {\n                    } 496\n                  } 1631\n                  clear_buddies() {\n                  } 496\n                  update_min_vruntime() {\n                  } 527\n                } 4580\n                hrtick_update() {\n                  hrtick_start_fair() {\n                  } 488\n                } 1489\n              } 13700\n            } 14949\n          } 16016\n          msecs_to_jiffies() {\n          } 496\n          put_prev_task_fair() {\n          } 504\n          pick_next_task_fair() {\n          } 489\n          pick_next_task_rt() {\n          } 496\n          pick_next_task_fair() {\n          } 489\n          pick_next_task_idle() {\n          } 489\n\n------------8\u003c---------- thread 4 ------------8\u003c----------\n\nfinish_task_switch() {\n} 1203\ndo_softirq() {\n  __do_softirq() {\n    __local_bh_disable() {\n    } 669\n    rcu_process_callbacks() {\n      __rcu_process_callbacks() {\n        cpu_quiet() {\n          rcu_start_batch() {\n          } 503\n        } 1647\n      } 3128\n      __rcu_process_callbacks() {\n      } 542\n    } 5362\n    _local_bh_enable() {\n    } 587\n  } 8880\n} 9986\nkthread_should_stop() {\n} 669\ndeactivate_task() {\n  dequeue_task() {\n    dequeue_task_fair() {\n      dequeue_entity() {\n        update_curr() {\n          calc_delta_mine() {\n          } 511\n          update_min_vruntime() {\n          } 511\n        } 2813\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nAcked-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3595a4c14aba16d299a6da8fe5dec3406c701c30",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/ftrace.c",
      "new_id": "26b2d92d48b30704d4b60dd914c585e93774a8df",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/ftrace.c"
    },
    {
      "type": "modify",
      "old_id": "b4ac734ad8d6973a05736c81182ca891d1f10158",
      "old_mode": 33188,
      "old_path": "include/linux/ftrace.h",
      "new_id": "fc2d54987198b3dcad26e033b342e77394e5438d",
      "new_mode": 33188,
      "new_path": "include/linux/ftrace.h"
    },
    {
      "type": "modify",
      "old_id": "9e19976af7276262be22aaf4036461208629e9e1",
      "old_mode": 33188,
      "old_path": "kernel/trace/ftrace.c",
      "new_id": "7e2d3b91692d1960ba01794f07f35d2c8dd497de",
      "new_mode": 33188,
      "new_path": "kernel/trace/ftrace.c"
    },
    {
      "type": "modify",
      "old_id": "f21ab2c68fd40151fa28e4463df73caa73a7372a",
      "old_mode": 33188,
      "old_path": "kernel/trace/trace.c",
      "new_id": "9d5f7c94f251aa33e2f07ca8197a24d7af09c44f",
      "new_mode": 33188,
      "new_path": "kernel/trace/trace.c"
    },
    {
      "type": "modify",
      "old_id": "72b5ef868765e0d5d7bb4fa4ad2c3534924f25de",
      "old_mode": 33188,
      "old_path": "kernel/trace/trace.h",
      "new_id": "ffe1bb1eb62039eed9c74b39c2320c557c9c986b",
      "new_mode": 33188,
      "new_path": "kernel/trace/trace.h"
    },
    {
      "type": "modify",
      "old_id": "f5bad4624d2bc93692713a6154106b5351e27dd1",
      "old_mode": 33188,
      "old_path": "kernel/trace/trace_functions_graph.c",
      "new_id": "b6f0cc2a00cbe8af8d7dcf1a77781b49dcb3d0b7",
      "new_mode": 33188,
      "new_path": "kernel/trace/trace_functions_graph.c"
    },
    {
      "type": "delete",
      "old_id": "e00d64509c9c42bc2ef92fca9aa7fcbc9187c702",
      "old_mode": 33188,
      "old_path": "kernel/trace/trace_functions_return.c",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    }
  ]
}
