)]}'
{
  "log": [
    {
      "commit": "d430d3d7e646eb1eac2bb4aa244a644312e67c76",
      "tree": "0f52534f54d89e41042536ff2f1b2ce74c45c033",
      "parents": [
        "ee5e51f51be755830f57445e268ba50e88ccbdbb"
      ],
      "author": {
        "name": "Jason Baron",
        "email": "jbaron@redhat.com",
        "time": "Wed Mar 16 17:29:47 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Apr 04 12:48:08 2011 -0400"
      },
      "message": "jump label: Introduce static_branch() interface\n\nIntroduce:\n\nstatic __always_inline bool static_branch(struct jump_label_key *key);\n\ninstead of the old JUMP_LABEL(key, label) macro.\n\nIn this way, jump labels become really easy to use:\n\nDefine:\n\n        struct jump_label_key jump_key;\n\nCan be used as:\n\n        if (static_branch(\u0026jump_key))\n                do unlikely code\n\nenable/disale via:\n\n        jump_label_inc(\u0026jump_key);\n        jump_label_dec(\u0026jump_key);\n\nthat\u0027s it!\n\nFor the jump labels disabled case, the static_branch() becomes an\natomic_read(), and jump_label_inc()/dec() are simply atomic_inc(),\natomic_dec() operations. We show testing results for this change below.\n\nThanks to H. Peter Anvin for suggesting the \u0027static_branch()\u0027 construct.\n\nSince we now require a \u0027struct jump_label_key *key\u0027, we can store a pointer into\nthe jump table addresses. In this way, we can enable/disable jump labels, in\nbasically constant time. This change allows us to completely remove the previous\nhashtable scheme. Thanks to Peter Zijlstra for this re-write.\n\nTesting:\n\nI ran a series of \u0027tbench 20\u0027 runs 5 times (with reboots) for 3\nconfigurations, where tracepoints were disabled.\n\njump label configured in\navg: 815.6\n\njump label *not* configured in (using atomic reads)\navg: 800.1\n\njump label *not* configured in (regular reads)\navg: 803.4\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20110316212947.GA8792@redhat.com\u003e\nSigned-off-by: Jason Baron \u003cjbaron@redhat.com\u003e\nSuggested-by: H. Peter Anvin \u003chpa@linux.intel.com\u003e\nTested-by: David Daney \u003cddaney@caviumnetworks.com\u003e\nAcked-by: Ralf Baechle \u003cralf@linux-mips.org\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "654986462939cd7ec18f276c6379a334dac106a7",
      "tree": "b9c70944012c24fa6d7cc973fa9b4b6e875ca842",
      "parents": [
        "e4a9ea5ee7c8812a7bf0c3fb725ceeaa3d4c2fcc"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@efficios.com",
        "time": "Wed Jan 26 17:26:22 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Feb 03 09:28:46 2011 -0500"
      },
      "message": "tracepoints: Fix section alignment using pointer array\n\nMake the tracepoints more robust, making them solid enough to handle compiler\nchanges by not relying on anything based on compiler-specific behavior with\nrespect to structure alignment. Implement an approach proposed by David Miller:\nuse an array of const pointers to refer to the individual structures, and export\nthis pointer array through the linker script rather than the structures per se.\nIt will consume 32 extra bytes per tracepoint (24 for structure padding and 8\nfor the pointers), but are less likely to break due to compiler changes.\n\nHistory:\n\ncommit 7e066fb8 tracepoints: add DECLARE_TRACE() and DEFINE_TRACE()\nadded the aligned(32) type and variable attribute to the tracepoint structures\nto deal with gcc happily aligning statically defined structures on 32-byte\nmultiples.\n\nOne attempt was to use a 8-byte alignment for tracepoint structures by applying\nboth the variable and type attribute to tracepoint structures definitions and\ndeclarations. It worked fine with gcc 4.5.1, but broke with gcc 4.4.4 and 4.4.5.\n\nThe reason is that the \"aligned\" attribute only specify the _minimum_ alignment\nfor a structure, leaving both the compiler and the linker free to align on\nlarger multiples. Because tracepoint.c expects the structures to be placed as an\narray within each section, up-alignment cause NULL-pointer exceptions due to the\nextra unexpected padding.\n\n(this patch applies on top of -tip)\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nLKML-Reference: \u003c20110126222622.GA10794@Krystal\u003e\nCC: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCC: Ingo Molnar \u003cmingo@elte.hu\u003e\nCC: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCC: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCC: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCC: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "bd1c8b22b7b81c6f6c4f5c19cb2387da3d02fb0f",
      "tree": "fcfceb5c70b2b6da02ccb5c1a08dc31268db2b7c",
      "parents": [
        "881fe4bdcdc899674524e30a76c76d298b447008"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Tue Jan 04 16:06:09 2011 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Jan 07 20:57:22 2011 -0500"
      },
      "message": "tracepoint: Add __rcu annotation\n\nAdd __rcu annotation to :\n\t(struct tracepoint)-\u003efuncs\n\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nLKML-Reference: \u003c4D22D4F1.50505@cn.fujitsu.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ec6e7c3ae39cb1dc279b5274aaaadd09ff8e224b",
      "tree": "5f68f7761cbd7c529dd9d9b31abe14e043e3ded8",
      "parents": [
        "3a9f987b3141f086de27832514aad9f50a53f754"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@efficios.com",
        "time": "Thu Jan 06 13:45:32 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Jan 07 20:53:35 2011 -0500"
      },
      "message": "tracing/trivial: Add missing comma in TRACE_EVENT comment\n\nAdd missing comma within the TRACE_EVENT() example in tracepoint.h.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nLKML-Reference: \u003c20110106184532.GA2526@Krystal\u003e\nCC: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCC: Ingo Molnar \u003cmingo@elte.hu\u003e\nCC: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "287050d390264402e11bea8b811859e42e8faa29",
      "tree": "b24814f1c985545f68ea9de87f7819b9230db0aa",
      "parents": [
        "042957801626465492b9428860de39a3cb2a8219"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Dec 02 16:46:18 2010 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Dec 03 10:45:34 2010 -0500"
      },
      "message": "tracing: Add TRACE_EVENT_CONDITIONAL()\n\nThere are instances in the kernel that we only want to trace\na tracepoint when a certain condition is set. But we do not\nwant to test for that condition in the core kernel.\nIf we test for that condition before calling the tracepoin, then\nwe will be performing that test even when tracing is not enabled.\nThis is 99.99% of the time.\n\nWe currently can just filter out on that condition, but that happens\nafter we write to the trace buffer. We just wasted time writing to\nthe ring buffer for an event we never cared about.\n\nThis patch adds:\n\n   TRACE_EVENT_CONDITION() and DEFINE_EVENT_CONDITION()\n\nThese have a new TP_CONDITION() argument that comes right after\nthe TP_ARGS().  This condition can use the parameters of TP_ARGS()\nin the TRACE_EVENT() to determine if the tracepoint should be traced\nor not. The TP_CONDITION() will be placed in a if (cond) trace;\n\nFor example, for the tracepoint sched_wakeup, it is useless to\ntrace a wakeup event where the caller never actually wakes\nanything up (where success \u003d\u003d 0). So adding:\n\n\tTP_CONDITION(success),\n\nwhich uses the \"success\" parameter of the wakeup tracepoint\nwill have it only trace when we have successfully woken up a\ntask.\n\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Arjan van de Ven \u003carjan@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "1ed0c5971159974185653170543a764cc061c857",
      "tree": "5887072ddc1c87776886c9a1b6ef61836f1ae925",
      "parents": [
        "61c32659b12c44e62de32fbf99f7e4ca783dc38b"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Nov 18 01:46:57 2010 +0100"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Nov 18 14:37:42 2010 +0100"
      },
      "message": "tracing: New macro to set up initial event flags value\n\nThis introduces the new TRACE_EVENT_FLAGS() macro in order\nto set up initial event flags value.\n\nThis macro must simply follow the definition of a trace event\nand take the event name and the flag value as parameters:\n\nTRACE_EVENT(my_event, .....\n....\n);\n\nTRACE_EVENT_FLAGS(my_event, 1)\n\nThis will set up 1 as the initial my_event-\u003eflags value.\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Jason Baron \u003cjbaron@redhat.com\u003e\n"
    },
    {
      "commit": "8f7b50c514206211cc282a4247f7b12f18dee674",
      "tree": "8d69af92e9ba46f8f775a300ba863040c817e77c",
      "parents": [
        "4c3ef6d79328c0e23ade60cbfc8d496123a6855c"
      ],
      "author": {
        "name": "Jason Baron",
        "email": "jbaron@redhat.com",
        "time": "Fri Sep 17 11:09:13 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Sep 22 16:31:01 2010 -0400"
      },
      "message": "jump label: Tracepoint support for jump labels\n\nMake use of the jump label infrastructure for tracepoints.\n\nSigned-off-by: Jason Baron \u003cjbaron@redhat.com\u003e\nLKML-Reference: \u003ca9ba2056e2c9cf332c3c300b577463ce66ff23a8.1284733808.git.jbaron@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "b70e4f0529c089b00d0a6da13106db4de1ada4c7",
      "tree": "d0c8fdf2272966d5c5db97c7456bb2919afd78ff",
      "parents": [
        "5ffc88819c84098e3f39185a38f8f7f7f8b210df"
      ],
      "author": {
        "name": "Wu Zhangjin",
        "email": "wuzhangjin@gmail.com",
        "time": "Mon Jun 21 19:09:09 2010 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Jun 21 12:23:36 2010 -0400"
      },
      "message": "tracing: Fix undeclared ENOSYS in include/linux/tracepoint.h\n\nThe header file include/linux/tracepoint.h may be included without\ninclude/linux/errno.h and then the compiler will fail on building for\nundelcared ENOSYS. This patch fixes this problem via including \u003clinux/errno.h\u003e\nto include/linux/tracepoint.h.\n\nSigned-off-by: Wu Zhangjin \u003cwuzhangjin@gmail.com\u003e\nLKML-Reference: \u003c1277118549-622-1-git-send-email-wuzhangjin@gmail.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "38516ab59fbc5b3bb278cf5e1fe2867c70cff32e",
      "tree": "904476d7780a27001281b9cb93c7959128f9a1d7",
      "parents": [
        "53da59aa6dd881fd0bbdd058a8a299d90ce9dd1d"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Apr 20 17:04:50 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri May 14 09:50:34 2010 -0400"
      },
      "message": "tracing: Let tracepoints have data passed to tracepoint callbacks\n\nThis patch adds data to be passed to tracepoint callbacks.\n\nThe created functions from DECLARE_TRACE() now need a mandatory data\nparameter. For example:\n\nDECLARE_TRACE(mytracepoint, int value, value)\n\nWill create the register function:\n\nint register_trace_mytracepoint((void(*)(void *data, int value))probe,\n                                void *data);\n\nAs the first argument, all callbacks (probes) must take a (void *data)\nparameter. So a callback for the above tracepoint will look like:\n\nvoid myprobe(void *data, int value)\n{\n}\n\nThe callback may choose to ignore the data parameter.\n\nThis change allows callbacks to register a private data pointer along\nwith the function probe.\n\n\tvoid mycallback(void *data, int value);\n\n\tregister_trace_mytracepoint(mycallback, mydata);\n\nThen the mycallback() will receive the \"mydata\" as the first parameter\nbefore the args.\n\nA more detailed example:\n\n  DECLARE_TRACE(mytracepoint, TP_PROTO(int status), TP_ARGS(status));\n\n  /* In the C file */\n\n  DEFINE_TRACE(mytracepoint, TP_PROTO(int status), TP_ARGS(status));\n\n  [...]\n\n       trace_mytracepoint(status);\n\n  /* In a file registering this tracepoint */\n\n  int my_callback(void *data, int status)\n  {\n\tstruct my_struct my_data \u003d data;\n\t[...]\n  }\n\n  [...]\n\tmy_data \u003d kmalloc(sizeof(*my_data), GFP_KERNEL);\n\tinit_my_data(my_data);\n\tregister_trace_mytracepoint(my_callback, my_data);\n\nThe same callback can also be registered to the same tracepoint as long\nas the data registered is different. Note, the data must also be used\nto unregister the callback:\n\n\tunregister_trace_mytracepoint(my_callback, my_data);\n\nBecause of the data parameter, tracepoints declared this way can not have\nno args. That is:\n\n  DECLARE_TRACE(mytracepoint, TP_PROTO(void), TP_ARGS());\n\nwill cause an error.\n\nIf no arguments are needed, a new macro can be used instead:\n\n  DECLARE_TRACE_NOARGS(mytracepoint);\n\nSince there are no arguments, the proto and args fields are left out.\n\nThis is part of a series to make the tracepoint footprint smaller:\n\n   text\t   data\t    bss\t    dec\t    hex\tfilename\n4913961\t1088356\t 861512\t6863829\t 68bbd5\tvmlinux.orig\n4914025\t1088868\t 861512\t6864405\t 68be15\tvmlinux.class\n4918492\t1084612\t 861512\t6864616\t 68bee8\tvmlinux.tracepoint\n\nAgain, this patch also increases the size of the kernel, but\nlays the ground work for decreasing it.\n\n v5: Fixed net/core/drop_monitor.c to handle these updates.\n\n v4: Moved the DECLARE_TRACE() DECLARE_TRACE_NOARGS out of the\n     #ifdef CONFIG_TRACE_POINTS, since the two are the same in both\n     cases. The __DECLARE_TRACE() is what changes.\n     Thanks to Frederic Weisbecker for pointing this out.\n\n v3: Made all register_* functions require data to be passed and\n     all callbacks to take a void * parameter as its first argument.\n     This makes the calling functions comply with C standards.\n\n     Also added more comments to the modifications of DECLARE_TRACE().\n\n v2: Made the DECLARE_TRACE() have the ability to pass arguments\n     and added a new DECLARE_TRACE_NOARGS() for tracepoints that\n     do not need any arguments.\n\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nAcked-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "53da59aa6dd881fd0bbdd058a8a299d90ce9dd1d",
      "tree": "53b68f57d815025ee6f97900544b4cfecca0d78d",
      "parents": [
        "8f0820183056ad26dabc0202115848a92f1143fc"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@efficios.com",
        "time": "Fri Apr 30 12:59:59 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri May 14 09:34:26 2010 -0400"
      },
      "message": "tracepoints: Add check trace callback type\n\nThis check is meant to be used by tracepoint users which do a direct cast of\ncallbacks to (void *) for direct registration, thus bypassing the\nregister_trace_##name and unregister_trace_##name checks.\n\nThis permits to ensure that the callback type matches the function type at the\ncall site, but without generating any code.\n\nAcked-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nLKML-Reference: \u003c20100430165959.GA25605@Krystal\u003e\nCC: Ingo Molnar \u003cmingo@elte.hu\u003e\nCC: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCC: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCC: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCC: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCC: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nCC: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCC: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "2e26ca7150a4f2ab3e69471dfc65f131e7dd7a05",
      "tree": "6570a1670df3baafc7ab95b7f718a5dc2d04bd53",
      "parents": [
        "03d646e62b06e9364e2dbb939d67934c6c9826cd"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed May 05 10:52:31 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 05 11:46:17 2010 -0400"
      },
      "message": "tracing: Fix tracepoint.h DECLARE_TRACE() to allow more than one header\n\nWhen more than one header is included under CREATE_TRACE_POINTS\nthe DECLARE_TRACE() macro is not defined back to its original meaning\nand the second include will fail to initialize the TRACE_EVENT()\nand DECLARE_TRACE() correctly.\n\nTo fix this the tracepoint.h file moves the define of DECLARE_TRACE()\nout of the #ifdef _LINUX_TRACEPOINT_H protection (just like the\ndefine of the TRACE_EVENT()). This way the define_trace.h will undef\nthe DECLARE_TRACE() at the end and allow new headers to start\nfrom scratch.\n\nThis patch also requires fixing the include/events/napi.h\n\nIt currently uses DECLARE_TRACE() and should be converted to a TRACE_EVENT()\nformat. But I\u0027ll leave that change to the authors of that file.\nBut since the napi.h file depends on using the CREATE_TRACE_POINTS\nand does not define its own DEFINE_TRACE() it must use the define_trace.h\nmethod instead.\n\nCc: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@efficios.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "7f5b774275df8c76a959eae7488128b637fcbfc8",
      "tree": "cf6526c53c319f78e4209ada6017e0c735b987eb",
      "parents": [
        "e3818b8dce2a934cd1521dbc4827e5238d8f45d8"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Tue Mar 16 17:00:29 2010 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Mar 16 10:10:40 2010 +0100"
      },
      "message": "rcu: Fix tracepoints \u0026 lockdep false positive\n\ntracepoint.h uses rcu_dereference(), which triggers this warning:\n\n[    0.701161] \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[    0.702211] [ INFO: suspicious rcu_dereference_check() usage. ]\n[    0.702716] ---------------------------------------------------\n[    0.703203] include/trace/events/workqueue.h:68 invoked rcu_dereference_check() without protection!\n[    0.703971] [ 0.703990] other info that might help us debug this:\n[    0.703993]\n[    0.705590]\n[    0.705604] rcu_scheduler_active \u003d 1, debug_locks \u003d 0\n[    0.706712] 1 lock held by swapper/1:\n[    0.707229]  #0:  (cpu_add_remove_lock){+.+.+.}, at: [\u003cc0142f54\u003e] cpu_maps_update_begin+0x14/0x20\n[    0.710097]\n[    0.710106] stack backtrace:\n[    0.712602] Pid: 1, comm: swapper Not tainted 2.6.34-rc1-tip-01613-g72662bb #168\n[    0.713231] Call Trace:\n[    0.713997]  [\u003cc017174d\u003e] lockdep_rcu_dereference+0x9d/0xb0\n[    0.714746]  [\u003cc015a117\u003e] create_workqueue_thread+0x107/0x110\n[    0.715353]  [\u003cc015aee0\u003e] ? worker_thread+0x0/0x340\n[    0.715845]  [\u003cc015a8e8\u003e] __create_workqueue_key+0x138/0x240\n[    0.716427]  [\u003cc0142f92\u003e] ? cpu_maps_update_done+0x12/0x20\n[    0.717012]  [\u003cc086b12f\u003e] init_workqueues+0x6f/0x80\n[    0.717530]  [\u003cc08576d2\u003e] kernel_init+0x102/0x1f0\n[    0.717570]  [\u003cc08575d0\u003e] ? kernel_init+0x0/0x1f0\n[    0.718944]  [\u003cc01030fa\u003e] kernel_thread_helper+0x6/0x10\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nLKML-Reference: \u003c4B9F48AD.4000404@cn.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "091ad3658e3c76c5fb05f65bfb64a0246f8f31b5",
      "tree": "90f67be68a31e2001a4a73e0325a2a7798240a51",
      "parents": [
        "28b4e0d86acf59ae3bc422921138a4958458326e"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 09:04:55 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 09:04:55 2009 +0100"
      },
      "message": "events: Rename TRACE_EVENT_TEMPLATE() to DECLARE_EVENT_CLASS()\n\nIt is not quite obvious at first sight what TRACE_EVENT_TEMPLATE\ndoes: does it define an event as well beyond defining a template?\n\nTo clarify this, rename it to DECLARE_EVENT_CLASS, which follows\nthe various \u0027DECLARE_*()\u0027 idioms we already have in the kernel:\n\n  DECLARE_EVENT_CLASS(class)\n\n    DEFINE_EVENT(class, event1)\n    DEFINE_EVENT(class, event2)\n    DEFINE_EVENT(class, event3)\n\nTo complete this logic we should also rename TRACE_EVENT() to:\n\n  DEFINE_SINGLE_EVENT(single_event)\n\n... but in a more quiet moment of the kernel cycle.\n\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nLKML-Reference: \u003c4B0E286A.2000405@cn.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "e5bc9721684e9412f3e0465222f317c362a8ab47",
      "tree": "380e76f64fd58e1f68715514e4b37734f3098fb3",
      "parents": [
        "ff038f5c37c2070829004a0678372766c2b32180"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Nov 18 20:36:26 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Nov 24 18:23:53 2009 -0500"
      },
      "message": "tracing: Create new DEFINE_EVENT_PRINT\n\nAfter creating the TRACE_EVENT_TEMPLATE I started to look at other\ntrace points to see what duplication was made. I noticed that there\nare several trace points where they are almost identical except for\nthe name and the output format. Since TRACE_EVENT_TEMPLATE was successful\nin bringing down the size of trace events, I added a DEFINE_EVENT_PRINT.\n\nDEFINE_EVENT_PRINT is used just like DEFINE_EVENT is. That is, the\nDEFINE_EVENT_PRINT also uses a TRACE_EVENT_TEMPLATE, but it allows the\ndeveloper to overwrite the print format. If there are two or more\nTRACE_EVENTS that are identical except for the name and print, then\nthey can be converted to use a TRACE_EVENT_TEMPLATE. Since the\nTRACE_EVENT_TEMPLATE already does the print output, the first trace event\nwould have its print format held in the TRACE_EVENT_TEMPLATE and\nbe defined with a DEFINE_EVENT. The rest will use the DEFINE_EVENT_PRINT\nand override the print format.\n\nConverting the sched trace points to both DEFINE_EVENT and\nDEFINE_EVENT_PRINT. Five were converted to DEFINE_EVENT and two were\nconverted to DEFINE_EVENT_PRINT.\n\nI was able to get the following:\n\n$ size kernel/sched.o-*\n   text\t   data\t    bss\t    dec\t    hex\tfilename\n  79299\t   6776\t   2520\t  88595\t  15a13\tkernel/sched.o-notrace\n 101941\t  11896\t   2584\t 116421\t  1c6c5\tkernel/sched.o-templ\n 104779\t  11896\t   2584\t 119259\t  1d1db\tkernel/sched.o-trace\n\nsched.o-notrace is the scheduler compiled with no trace points.\nsched.o-templ is with the use of DEFINE_EVENT and DEFINE_EVENT_PRINT\nsched.o-trace is the current trace events.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ff038f5c37c2070829004a0678372766c2b32180",
      "tree": "69a48d73eb959ae3c9be3814c42e37a8ea188c41",
      "parents": [
        "fa7c27ee9394fc0d52404b2a89882e95868a60b9"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Nov 18 20:27:27 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Nov 24 17:52:11 2009 -0500"
      },
      "message": "tracing: Create new TRACE_EVENT_TEMPLATE\n\nThere are some places in the kernel that define several tracepoints and\nthey are all identical besides the name. The code to enable, disable and\nrecord is created for every trace point even if most of the code is\nidentical.\n\nThis patch adds TRACE_EVENT_TEMPLATE that lets the developer create\na template TRACE_EVENT and create trace points with DEFINE_EVENT, which\nis based off of a given template. Each trace point used by this\nwill share most of the code, and bring down the size of the kernel\nwhen there are several duplicate events.\n\nUsage is:\n\nTRACE_EVENT_TEMPLATE(name, proto, args, tstruct, assign, print);\n\nWhich would be the same as defining a normal TRACE_EVENT.\n\nTo create the trace events that the trace points will use:\n\nDEFINE_EVENT(template, name, proto, args) is done. The template\nis the name of the TRACE_EVENT_TEMPLATE to use. The name is the\nname of the trace point. The parameters proto and args must be the same\nas the proto and args of the template. If they are not the same,\nthen a compile error will result. I tried hard removing this duplication\nbut the C preprocessor is not powerful enough (or my CPP magic\nexperience points is not at a high enough level) to not need them.\n\nA lot of trace events are coming in with new XFS development. Most of\nthe trace points are identical except for the name. The following shows\nthe advantage of having TRACE_EVENT_TEMPLATE:\n\n$ size fs/xfs/xfs.o.*\n    text          data     bss     dec     hex filename\n  452114          2788    3520  458422   6feb6 fs/xfs/xfs.o.old\n  638482         38116    3744  680342   a6196 fs/xfs/xfs.o.template\n  996954         38116    4480 1039550   fdcbe fs/xfs/xfs.o.trace\n\nxfs.o.old is without any tracepoints.\nxfs.o.template uses the new TRACE_EVENT_TEMPLATE.\nxfs.o.trace uses the current TRACE_EVENT macros.\n\nRequested-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "8cd09a5984c08dafade74c9c1ab4311af2bf2d24",
      "tree": "232d9937d2a8e7175a0c25c513685f96b9a3f9d3",
      "parents": [
        "79fe249c8368be35c9ca05982e80c68e959505e1"
      ],
      "author": {
        "name": "Li Hong",
        "email": "lihong.hi@gmail.com",
        "time": "Tue Sep 22 18:00:44 2009 +0800"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Tue Sep 22 23:14:58 2009 +0200"
      },
      "message": "tracing: Fix a comment and a trivial format issue in tracepoint.h\n\nFix the tracepoint documentation path in tracepoints headers and\na misaligned tabulation.\n\nSigned-off-by: Li Hong \u003clihong.hi@gmail.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nLKML-Reference: \u003c3a3680030909220300h7cf18849q4d4702b9d4feaa67@mail.gmail.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "35dce1a99d010f3d738af4ce1b9b77302fdfe69c",
      "tree": "e34a37de965a79a2ae301de4d0557f500111dde6",
      "parents": [
        "7cb2e3ee2aeec5b83ecadba929a2dc575dd4008f",
        "1c569f0264ea629c10bbab471dd0626ce4d3f19f"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Aug 26 08:29:02 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Aug 26 08:29:02 2009 +0200"
      },
      "message": "Merge branch \u0027tracing/core\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing into tracing/core\n\nConflicts:\n\tinclude/linux/tracepoint.h\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "7cb2e3ee2aeec5b83ecadba929a2dc575dd4008f",
      "tree": "8918c12cac3cd816bf3dfaafc3fac46e36f4a73d",
      "parents": [
        "5ac35daa9343936038a3c9c4f4d6d3fe6a2a7bd8"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Aug 26 00:32:37 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Aug 26 00:32:37 2009 -0400"
      },
      "message": "tracing: add comments to explain TRACE_EVENT out of protection\n\nThe commit:\n  commit 5ac35daa9343936038a3c9c4f4d6d3fe6a2a7bd8\n  Author: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\n  tracing/events: fix the include file dependencies\n\nMoved the TRACE_EVENT out of the ifdef protection of tracepoints.h\nbut uses the define of TRACE_EVENT itself as protection. This patch\nadds comments to explain why.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "5ac35daa9343936038a3c9c4f4d6d3fe6a2a7bd8",
      "tree": "0810db04bd8ad675aee30681576903e393e9d4c6",
      "parents": [
        "5079f3261ffd7fe4a537679af695f2328943a245"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@cn.fujitsu.com",
        "time": "Tue Aug 25 14:06:22 2009 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Aug 26 00:32:09 2009 -0400"
      },
      "message": "tracing/events: fix the include file dependencies\n\nThe TRACE_EVENT depends on the include/linux/tracepoint.h first\nand include/trace/ftrace.h later, if we include the ftrace.h early,\na building error will occur.\n\nBoth define TRACE_EVENT in trace_a.h and trace_b.h, if we include\nthose in .c file, like this:\n\n#define CREATE_TRACE_POINTS\ninclude \u003ctrace/events/trace_a.h\u003e\ninclude \u003ctrace/events/trace_b.h\u003e\n\nThe above will not work, because the TRACE_EVENT was re-defined by\nthe previous .h file.\n\nReported-by: Wei Yongjun \u003cyjwei@cn.fujitsu.com\u003e\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\nLKML-Reference: \u003c4A937F5E.3020802@cn.fujitsu.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "97419875865859fd2403e66266c02ce028e2f5ab",
      "tree": "7df6e6df767e9c8ff538a50bcae17638a1c8da99",
      "parents": [
        "3d27d8cb34fc156beb86de2338ca4029873a5cc6"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "jistone@redhat.com",
        "time": "Mon Aug 24 14:43:13 2009 -0700"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Wed Aug 26 00:36:41 2009 +0200"
      },
      "message": "tracing: Move tracepoint callbacks from declaration to definition\n\nIt\u0027s not strictly correct for the tracepoint reg/unreg callbacks to\noccur when a client is hooking up, because the actual tracepoint may not\nbe present yet.  This happens to be fine for syscall, since that\u0027s in\nthe core kernel, but it would cause problems for tracepoints defined in\na module that hasn\u0027t been loaded yet.  It also means the reg/unreg has\nto be EXPORTed for any modules to use the tracepoint (as in SystemTap).\n\nThis patch removes DECLARE_TRACE_WITH_CALLBACK, and instead introduces\nDEFINE_TRACE_FN which stores the callbacks in struct tracepoint.  The\ncallbacks are used now when the active state of the tracepoint changes\nin set_tracepoint \u0026 disable_tracepoint.\n\nThis also introduces TRACE_EVENT_FN, so ftrace events can also provide\nregistration callbacks if needed.\n\nSigned-off-by: Josh Stone \u003cjistone@redhat.com\u003e\nCc: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nCc: Jiaying Zhang \u003cjiayingz@google.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nLKML-Reference: \u003c1251150194-1713-4-git-send-email-jistone@redhat.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "63fbdab3157b72467013fe4dcf88c85e45280ef7",
      "tree": "c0e8647e18528dca9682e98a441729adfa41696c",
      "parents": [
        "066e0378c23f0a3db730893f6a041e4a3922a385"
      ],
      "author": {
        "name": "Jason Baron",
        "email": "jbaron@redhat.com",
        "time": "Mon Aug 10 16:52:27 2009 -0400"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Tue Aug 11 20:35:26 2009 +0200"
      },
      "message": "tracing: Add DECLARE_TRACE_WITH_CALLBACK() macro\n\nIntroduce a new \u0027DECLARE_TRACE_WITH_CALLBACK()\u0027 macro, so that\ntracepoints can associate an external register/unregister function.\n\nThis prepares for the syscalls tracer conversion to trace events. We\nwill need to perform arch level operations once a syscall event is\nturned on/off, such as TIF flags setting, hence the need of such\nspecific callbacks.\n\nSigned-off-by: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nCc: Jiaying Zhang \u003cjiayingz@google.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\n"
    },
    {
      "commit": "156f5a7801195fa2ce44aeeb62d6cf8468f3332a",
      "tree": "dd506816ca6f14bb650189aa364eb0a2f51ad5cc",
      "parents": [
        "1b713e00500c6f03317742981674e89a21629399"
      ],
      "author": {
        "name": "GeunSik Lim",
        "email": "leemgs1@gmail.com",
        "time": "Tue Jun 02 15:01:37 2009 +0900"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 15 21:30:28 2009 -0700"
      },
      "message": "debugfs: Fix terminology inconsistency of dir name to mount debugfs filesystem.\n\nMany developers use \"/debug/\" or \"/debugfs/\" or \"/sys/kernel/debug/\"\ndirectory name to mount debugfs filesystem for ftrace according to\n./Documentation/tracers/ftrace.txt file.\n\nAnd, three directory names(ex:/debug/, /debugfs/, /sys/kernel/debug/) is\nexisted in kernel source like ftrace, DRM, Wireless, Documentation,\nNetwork[sky2]files to mount debugfs filesystem.\n\ndebugfs means debug filesystem for debugging easy to use by greg kroah\nhartman. \"/sys/kernel/debug/\" name is suitable as directory name\nof debugfs filesystem.\n- debugfs related reference: http://lwn.net/Articles/334546/\n\nFix inconsistency of directory name to mount debugfs filesystem.\n\n* From Steven Rostedt\n  - find_debugfs() and tracing_files() in this patch.\n\nSigned-off-by: GeunSik Lim \u003cgeunsik.lim@samsung.com\u003e\nAcked-by     : Inaky Perez-Gonzalez \u003cinaky@linux.intel.com\u003e\nReviewed-by  : Steven Rostedt \u003crostedt@goodmis.org\u003e\nReviewed-by  : James Smart \u003cjames.smart@emulex.com\u003e\nCC: Jiri Kosina \u003ctrivial@kernel.org\u003e\nCC: David Airlie \u003cairlied@linux.ie\u003e\nCC: Peter Osterlund \u003cpetero2@telia.com\u003e\nCC: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\nCC: Anil S Keshavamurthy \u003canil.s.keshavamurthy@intel.com\u003e\nCC: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n\n"
    },
    {
      "commit": "b8e65554d80b4c560d201362d0e8fa02109d89fd",
      "tree": "21ebf291cf1ac97533cac99619652cd21bbd04f2",
      "parents": [
        "160031b556e93590fa8635210d73d93c3d3853a9"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 24 11:50:39 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 24 11:50:39 2009 -0400"
      },
      "message": "tracing: remove deprecated TRACE_FORMAT\n\nThe TRACE_FORMAT macro has been deprecated by the TRACE_EVENT macro.\nThere are no more users. All new users must use the TRACE_EVENT macro.\n\n[ Impact: remove old functionality ]\n\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ea20d9293ce423a39717ed4375393129a2e701f9",
      "tree": "30cbfd532e6541c17eb69a63044cfe7bce6cf974",
      "parents": [
        "0a19e53c1514ad8e9c3cbab40c6c3f52c86f403d"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 10 08:54:16 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Apr 14 09:43:40 2009 -0400"
      },
      "message": "tracing: consolidate trace and trace_event headers\n\nImpact: clean up\n\nNeil Horman (et. al.) criticized the way the trace events were broken up\ninto two files. The reason for that was that ftrace needed to separate out\nthe declarations from where the #include \u003clinux/tracepoint.h\u003e was used.\nIt then dawned on me that the tracepoint.h header only needs to define the\nTRACE_EVENT macro if it is not already defined.\n\nThe solution is simply to test if TRACE_EVENT is defined, and if it is not\nthen the linux/tracepoint.h header can define it. This change consolidates\nall the \u003ctraces\u003e.h and \u003ctraces\u003e_event_types.h into the \u003ctraces\u003e.h file.\n\nReported-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nReported-by: Theodore Tso \u003ctytso@mit.edu\u003e\nReported-by: Jiaying Zhang \u003cjiayingz@google.com\u003e\nCc: Zhaolei \u003czhaolei@cn.fujitsu.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Jason Baron \u003cjbaron@redhat.com\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ef18012b248b47ec9a12c3a83ca5e99782d39c5d",
      "tree": "8103b4d14c6b81a6a5ec39cd43e4ca7ffb51625d",
      "parents": [
        "0e3d0f0566f3fcf664782f597070bbc669d78454"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 14:10:56 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 14:13:14 2009 -0400"
      },
      "message": "tracing: remove funky whitespace in the trace code\n\nImpact: clean up\n\nThere existed a lot of \u003cspace\u003e\u003ctab\u003e\u0027s in the tracing code. This\npatch removes them.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "823f9124fb2e33eeb624d139978a52089f8a02ae",
      "tree": "e1094e94a958e2098c3946de4ac648a7d87a1bcb",
      "parents": [
        "30a8fecc2d34f086df34fe2f2b926f080e002600"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 12:58:51 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 12:58:51 2009 -0400"
      },
      "message": "tracing: document TRACE_EVENT macro in tracepoint.h\n\nImpact: clean up / comments\n\nKosaki Motohiro asked about an explanation to the TRACE_EVENT macro.\nIngo Molnar replied with a nice description.\n\nThis patch takes the description that Ingo wrote (with some slight\nmodifications) and adds it to the tracepoint.h file.\n\nReported-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "30a8fecc2d34f086df34fe2f2b926f080e002600",
      "tree": "a6959a40a6a3065b61ddcf4954861dfd8892a843",
      "parents": [
        "2314c4ae1461c9e8b26cf8b9a851f280bc5769e1"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 12:41:38 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 12:41:38 2009 -0400"
      },
      "message": "tracing: flip the TP_printk and TP_fast_assign in the TRACE_EVENT macro\n\nImpact: clean up\n\nIn trying to stay consistant with the C style format in the TRACE_EVENT\nmacro, it makes more sense to do the printk after the assigning of\nthe variables.\n\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "157587d7ac555458da9f682e3250135e468470a6",
      "tree": "81033336672eb821f3833a1667bedfc646a3a6f5",
      "parents": [
        "d6e2ca4c05be6a5ab16030a9f227301bd6acc9f0"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 00:15:34 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 00:35:12 2009 -0400"
      },
      "message": "tracing: remove obsolete TRACE_EVENT_FORMAT macro\n\nImpact: clean up\n\nThe TRACE_EVENT_FORMAT macro is no longer used by trace points\nand only the DECLARE_TRACE, TRACE_FORMAT or TRACE_EVENT macros should\nbe used by them. Although the TRACE_EVENT_FORMAT macro is still used\nby the internal tracing utility, it should not be used in core\nkernel code.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "da4d03020c2af32f73e8bfbab0a66620d85bb9bb",
      "tree": "3ee6d7d69754df7910454315a6011c14d8664d01",
      "parents": [
        "9cc26a261d43e5898287a1f5808132f8f05ceb1c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Mar 09 17:14:30 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 00:35:07 2009 -0400"
      },
      "message": "tracing: new format for specialized trace points\n\nImpact: clean up and enhancement\n\nThe TRACE_EVENT_FORMAT macro looks quite ugly and is limited in its\nability to save data as well as to print the record out. Working with\nIngo Molnar, we came up with a new format that is much more pleasing to\nthe eye of C developers. This new macro is more C style than the old\nmacro, and is more obvious to what it does.\n\nHere\u0027s the example. The only updated macro in this patch is the\nsched_switch trace point.\n\nThe old method looked like this:\n\n TRACE_EVENT_FORMAT(sched_switch,\n        TP_PROTO(struct rq *rq, struct task_struct *prev,\n                struct task_struct *next),\n        TP_ARGS(rq, prev, next),\n        TP_FMT(\"task %s:%d \u003d\u003d\u003e %s:%d\",\n              prev-\u003ecomm, prev-\u003epid, next-\u003ecomm, next-\u003epid),\n        TRACE_STRUCT(\n                TRACE_FIELD(pid_t, prev_pid, prev-\u003epid)\n                TRACE_FIELD(int, prev_prio, prev-\u003eprio)\n                TRACE_FIELD_SPECIAL(char next_comm[TASK_COMM_LEN],\n                                    next_comm,\n                                    TP_CMD(memcpy(TRACE_ENTRY-\u003enext_comm,\n                                                 next-\u003ecomm,\n                                                 TASK_COMM_LEN)))\n                TRACE_FIELD(pid_t, next_pid, next-\u003epid)\n                TRACE_FIELD(int, next_prio, next-\u003eprio)\n        ),\n        TP_RAW_FMT(\"prev %d:%d \u003d\u003d\u003e next %s:%d:%d\")\n        );\n\nThe above method is hard to read and requires two format fields.\n\nThe new method:\n\n /*\n  * Tracepoint for task switches, performed by the scheduler:\n  *\n  * (NOTE: the \u0027rq\u0027 argument is not used by generic trace events,\n  *        but used by the latency tracer plugin. )\n  */\n TRACE_EVENT(sched_switch,\n\n\tTP_PROTO(struct rq *rq, struct task_struct *prev,\n\t\t struct task_struct *next),\n\n\tTP_ARGS(rq, prev, next),\n\n\tTP_STRUCT__entry(\n\t\t__array(\tchar,\tprev_comm,\tTASK_COMM_LEN\t)\n\t\t__field(\tpid_t,\tprev_pid\t\t\t)\n\t\t__field(\tint,\tprev_prio\t\t\t)\n\t\t__array(\tchar,\tnext_comm,\tTASK_COMM_LEN\t)\n\t\t__field(\tpid_t,\tnext_pid\t\t\t)\n\t\t__field(\tint,\tnext_prio\t\t\t)\n\t),\n\n\tTP_printk(\"task %s:%d [%d] \u003d\u003d\u003e %s:%d [%d]\",\n\t\t__entry-\u003eprev_comm, __entry-\u003eprev_pid, __entry-\u003eprev_prio,\n\t\t__entry-\u003enext_comm, __entry-\u003enext_pid, __entry-\u003enext_prio),\n\n\tTP_fast_assign(\n\t\tmemcpy(__entry-\u003enext_comm, next-\u003ecomm, TASK_COMM_LEN);\n\t\t__entry-\u003eprev_pid\t\u003d prev-\u003epid;\n\t\t__entry-\u003eprev_prio\t\u003d prev-\u003eprio;\n\t\tmemcpy(__entry-\u003eprev_comm, prev-\u003ecomm, TASK_COMM_LEN);\n\t\t__entry-\u003enext_pid\t\u003d next-\u003epid;\n\t\t__entry-\u003enext_prio\t\u003d next-\u003eprio;\n\t)\n );\n\nThis macro is called TRACE_EVENT, it is broken up into 5 parts:\n\n TP_PROTO:        the proto type of the trace point\n TP_ARGS:         the arguments of the trace point\n TP_STRUCT_entry: the structure layout of the entry in the ring buffer\n TP_printk:       the printk format\n TP_fast_assign:  the method used to write the entry into the ring buffer\n\nThe structure is the definition of how the event will be saved in the\nring buffer. The printk is used by the internal tracing in case of\nan oops, and the kernel needs to print out the format of the record\nto the console. This the TP_printk gives a means to show the records\nin a human readable format. It is also used to print out the data\nfrom the trace file.\n\nThe TP_fast_assign is executed directly. It is basically like a C function,\nwhere the __entry is the handle to the record.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "2939b0469d04ba9ac791aca9a81625d7eb50662b",
      "tree": "573f10c39f34c670fdc6832415642738c5afb3f9",
      "parents": [
        "156b5f172a64103bcb13b6d26288388b9019caa3"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Mar 09 15:47:18 2009 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Mar 10 00:35:04 2009 -0400"
      },
      "message": "tracing: replace TP\u003cvar\u003e with TP_\u003cvar\u003e\n\nImpact: clean up\n\nThe macros TPPROTO, TPARGS, TPFMT, TPRAWFMT, and TPCMD all look a bit\nugly. This patch adds an underscore to their names.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "629928041c53771f9902753d50fef6b35f36d33d",
      "tree": "e960bf1f0311a2d00eadebfc1304662a149e32fe",
      "parents": [
        "fd99498989f3b3feeab89dcadf537138ba136d24"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Sat Feb 28 02:47:59 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Sat Feb 28 04:04:13 2009 -0500"
      },
      "message": "tracing: create the C style tracing for the sched subsystem\n\nThis patch utilizes the TRACE_EVENT_FORMAT macro to enable the C style\nfaster tracing for the sched subsystem trace points.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "3cdfdf91fcc77cfc82592e2b5c2ab35abe819c41",
      "tree": "176e2dbbf4e8c6ab59d0243f501338d104d7a31f",
      "parents": [
        "eef62a6826b8ab530cefff5aa55c1661a209c803"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Feb 25 15:54:30 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Feb 25 21:44:26 2009 -0500"
      },
      "message": "tracing: wrap arguments with PARAMS\n\nPeter Zijlstra warned that TPPROTO and TPARGS might become something\nother than a simple copy of itself. To prevent this from having\nside effects in the TRACE_FORMAT macro in tracepoint.h, we add a\nPARAMS() macro to be defined as just a wrapper.\n\nReported-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "eef62a6826b8ab530cefff5aa55c1661a209c803",
      "tree": "f24c7f08b9a6ed443c09f26509cf2cf26fb8a19c",
      "parents": [
        "d7350c3f45694104e820041969c8185c5f99e57c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Feb 25 15:49:52 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Feb 25 21:44:22 2009 -0500"
      },
      "message": "tracing: rename DEFINE_TRACE_FMT to just TRACE_FORMAT\n\nThere\u0027s been a bit confusion to whether DEFINE/DECLARE_TRACE_FMT should\nbe a DEFINE or a DECLARE. Ingo Molnar suggested simply calling it\nTRACE_FORMAT.\n\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "7c37730cd31ddb2d3a1da142af9b18c29b8c433b",
      "tree": "60e2d4a1b53dba29824b967345bc43814853b8a4",
      "parents": [
        "c478f8786973d6d7552c652ddad3f6fd86b5af28"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Feb 24 12:07:53 2009 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Feb 24 21:53:32 2009 -0500"
      },
      "message": "tracing: add DEFINE_TRACE_FMT to tracepoint.h\n\nThis patch creates a DEFINE_TRACE_FMT to map to DECLARE_TRACE.\nThis allows for the developers to place format strings and\nargs in with their tracepoint declaration. A tracer may now\noverride the DEFINE_TRACE_FMT macro and use it to record\na default format.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\n"
    },
    {
      "commit": "7e066fb870fcd1025ec3ba7bbde5d541094f4ce1",
      "tree": "52acda06de25c029b9834110d7bf6b4abc50353b",
      "parents": [
        "32f85742778dfc2c74975cf0b9f5bdb13470cb32"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Nov 14 17:47:47 2008 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Nov 16 09:01:36 2008 +0100"
      },
      "message": "tracepoints: add DECLARE_TRACE() and DEFINE_TRACE()\n\nImpact: API *CHANGE*. Must update all tracepoint users.\n\nAdd DEFINE_TRACE() to tracepoints to let them declare the tracepoint\nstructure in a single spot for all the kernel. It helps reducing memory\nconsumption, especially when declaring a lot of tracepoints, e.g. for\nkmalloc tracing.\n\n*API CHANGE WARNING*: now, DECLARE_TRACE() must be used in headers for\ntracepoint declarations rather than DEFINE_TRACE(). This is the sane way\nto do it. The name previously used was misleading.\n\nUpdates scheduler instrumentation to follow this API change.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5f382671def7cb9c0f4b75d586dc5f60dca5e1c3",
      "tree": "ee90d469b24a893c8ec777775a43d41cdfb6f76f",
      "parents": [
        "c420970ef476d7d68df119711700666224001f43"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Nov 14 17:47:45 2008 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Nov 16 09:01:34 2008 +0100"
      },
      "message": "tracepoints: do not put arguments in name\n\nImpact: cleanup\n\nThat\u0027s overkill, takes space. We have a global tracepoint registery in\nheader files anyway.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c420970ef476d7d68df119711700666224001f43",
      "tree": "c10ebb11a03199f99d779472037bd49129b43abb",
      "parents": [
        "da7b3eab167091693ad215ad7692f7d0d24d1356"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Nov 14 17:47:44 2008 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Nov 16 09:01:33 2008 +0100"
      },
      "message": "tracepoints: use unregister return value\n\nImpact: bugfix.\n\nUnregistering a tracepoint can fail. Return the error value.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "da7b3eab167091693ad215ad7692f7d0d24d1356",
      "tree": "a879fc523166fdaf196fe128e11246996eda0480",
      "parents": [
        "de0baf9ad661ac630a45a50ea1717cc4f4b33ace"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Nov 14 17:47:43 2008 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Nov 16 09:01:32 2008 +0100"
      },
      "message": "tracepoints: use rcu_*_sched_notrace\n\nMake sure tracepoints can be called within ftrace callbacks.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "127cafbb276266b1b8da967bfe25a062ab1d42ab",
      "tree": "8f7183fa6f9a68b2bd3b3734da3575e4eff46a1d",
      "parents": [
        "19dba33c43a2f0f2aa727ae075ec3b11330775ef"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Tue Oct 28 10:51:53 2008 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Nov 03 10:28:52 2008 +0100"
      },
      "message": "tracepoint: introduce *_noupdate APIs.\n\nImpact: add new tracepoint APIs to allow the batched registration of probes\n\nnew APIs separate tracepoint_probe_register(),\ntracepoint_probe_unregister() into 2 steps. The first step of them\nis just update tracepoint_entry, not connect or disconnect.\n\nthis patch introduces tracepoint_probe_update_all() for update all.\n\nthese APIs are very useful for registering lots of probes\nbut just updating once. Another very important thing is that\n*_noupdate APIs do not require module_mutex.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nAcked-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "231375cc5cc3549bb413f94a164bdcbd5f9ce943",
      "tree": "03ff935268f5c551da14704d14667e6951a5b25f",
      "parents": [
        "f2461fc82a083dd60062e05e704c5fcc1c658ba1"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Oct 03 15:01:33 2008 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Oct 14 10:39:31 2008 +0200"
      },
      "message": "tracepoints: synchronize unregister static inline\n\nTurn tracepoint synchronize unregister into a static inline. There is no\nreason to keep it as a macro over a static inline.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f2461fc82a083dd60062e05e704c5fcc1c658ba1",
      "tree": "1b5e13fd4895351d26e9bd4a404c40c8d8381a09",
      "parents": [
        "8b27386a9ce9c7f0f8702cff7565a46802ad57d1"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Mon Oct 06 10:33:00 2008 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Oct 14 10:39:30 2008 +0200"
      },
      "message": "tracepoints: tracepoint_synchronize_unregister()\n\nCreate tracepoint_synchronize_unregister() which must be called before the end\nof exit() to make sure every probe callers have exited the non preemptible\nsection and thus are not executing the probe code anymore.\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "97e1c18e8d17bd87e1e383b2e9d9fc740332c8e2",
      "tree": "5c6bfce8bacf04c2993a0029788a1370a483afa6",
      "parents": [
        "e7f2f9918c0e97aa98ba147ca387e2c7238f0711"
      ],
      "author": {
        "name": "Mathieu Desnoyers",
        "email": "mathieu.desnoyers@polymtl.ca",
        "time": "Fri Jul 18 12:16:16 2008 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Oct 14 10:28:28 2008 +0200"
      },
      "message": "tracing: Kernel Tracepoints\n\nImplementation of kernel tracepoints. Inspired from the Linux Kernel\nMarkers. Allows complete typing verification by declaring both tracing\nstatement inline functions and probe registration/unregistration static\ninline functions within the same macro \"DEFINE_TRACE\". No format string\nis required. See the tracepoint Documentation and Samples patches for\nusage examples.\n\nTaken from the documentation patch :\n\n\"A tracepoint placed in code provides a hook to call a function (probe)\nthat you can provide at runtime. A tracepoint can be \"on\" (a probe is\nconnected to it) or \"off\" (no probe is attached). When a tracepoint is\n\"off\" it has no effect, except for adding a tiny time penalty (checking\na condition for a branch) and space penalty (adding a few bytes for the\nfunction call at the end of the instrumented function and adds a data\nstructure in a separate section).  When a tracepoint is \"on\", the\nfunction you provide is called each time the tracepoint is executed, in\nthe execution context of the caller. When the function provided ends its\nexecution, it returns to the caller (continuing from the tracepoint\nsite).\n\nYou can put tracepoints at important locations in the code. They are\nlightweight hooks that can pass an arbitrary number of parameters, which\nprototypes are described in a tracepoint declaration placed in a header\nfile.\"\n\nAddition and removal of tracepoints is synchronized by RCU using the\nscheduler (and preempt_disable) as guarantees to find a quiescent state\n(this is really RCU \"classic\"). The update side uses rcu_barrier_sched()\nwith call_rcu_sched() and the read/execute side uses\n\"preempt_disable()/preempt_enable()\".\n\nWe make sure the previous array containing probes, which has been\nscheduled for deletion by the rcu callback, is indeed freed before we\nproceed to the next update. It therefore limits the rate of modification\nof a single tracepoint to one update per RCU period. The objective here\nis to permit fast batch add/removal of probes on _different_\ntracepoints.\n\nChangelog :\n- Use #name \":\" #proto as string to identify the tracepoint in the\n  tracepoint table. This will make sure not type mismatch happens due to\n  connexion of a probe with the wrong type to a tracepoint declared with\n  the same name in a different header.\n- Add tracepoint_entry_free_old.\n- Change __TO_TRACE to get rid of the \u0027i\u0027 iterator.\n\nMasami Hiramatsu \u003cmhiramat@redhat.com\u003e :\nTested on x86-64.\n\nPerformance impact of a tracepoint : same as markers, except that it\nadds about 70 bytes of instructions in an unlikely branch of each\ninstrumented function (the for loop, the stack setup and the function\ncall). It currently adds a memory read, a test and a conditional branch\nat the instrumentation site (in the hot path). Immediate values will\neventually change this into a load immediate, test and branch, which\nremoves the memory read which will make the i-cache impact smaller\n(changing the memory read for a load immediate removes 3-4 bytes per\nsite on x86_32 (depending on mov prefixes), or 7-8 bytes on x86_64, it\nalso saves the d-cache hit).\n\nAbout the performance impact of tracepoints (which is comparable to\nmarkers), even without immediate values optimizations, tests done by\nHideo Aoki on ia64 show no regression. His test case was using hackbench\non a kernel where scheduler instrumentation (about 5 events in code\nscheduler code) was added.\n\nQuoting Hideo Aoki about Markers :\n\nI evaluated overhead of kernel marker using linux-2.6-sched-fixes git\ntree, which includes several markers for LTTng, using an ia64 server.\n\nWhile the immediate trace mark feature isn\u0027t implemented on ia64, there\nis no major performance regression. So, I think that we don\u0027t have any\nissues to propose merging marker point patches into Linus\u0027s tree from\nthe viewpoint of performance impact.\n\nI prepared two kernels to evaluate. The first one was compiled without\nCONFIG_MARKERS. The second one was enabled CONFIG_MARKERS.\n\nI downloaded the original hackbench from the following URL:\nhttp://devresources.linux-foundation.org/craiger/hackbench/src/hackbench.c\n\nI ran hackbench 5 times in each condition and calculated the average and\ndifference between the kernels.\n\n    The parameter of hackbench: every 50 from 50 to 800\n    The number of CPUs of the server: 2, 4, and 8\n\nBelow is the results. As you can see, major performance regression\nwasn\u0027t found in any case. Even if number of processes increases,\ndifferences between marker-enabled kernel and marker- disabled kernel\ndoesn\u0027t increase. Moreover, if number of CPUs increases, the differences\ndoesn\u0027t increase either.\n\nCuriously, marker-enabled kernel is better than marker-disabled kernel\nin more than half cases, although I guess it comes from the difference\nof memory access pattern.\n\n* 2 CPUs\n\nNumber of | without      | with         | diff     | diff    |\nprocesses | Marker [Sec] | Marker [Sec] |   [Sec]  |   [%]   |\n--------------------------------------------------------------\n       50 |      4.811   |       4.872  |  +0.061  |  +1.27  |\n      100 |      9.854   |      10.309  |  +0.454  |  +4.61  |\n      150 |     15.602   |      15.040  |  -0.562  |  -3.6   |\n      200 |     20.489   |      20.380  |  -0.109  |  -0.53  |\n      250 |     25.798   |      25.652  |  -0.146  |  -0.56  |\n      300 |     31.260   |      30.797  |  -0.463  |  -1.48  |\n      350 |     36.121   |      35.770  |  -0.351  |  -0.97  |\n      400 |     42.288   |      42.102  |  -0.186  |  -0.44  |\n      450 |     47.778   |      47.253  |  -0.526  |  -1.1   |\n      500 |     51.953   |      52.278  |  +0.325  |  +0.63  |\n      550 |     58.401   |      57.700  |  -0.701  |  -1.2   |\n      600 |     63.334   |      63.222  |  -0.112  |  -0.18  |\n      650 |     68.816   |      68.511  |  -0.306  |  -0.44  |\n      700 |     74.667   |      74.088  |  -0.579  |  -0.78  |\n      750 |     78.612   |      79.582  |  +0.970  |  +1.23  |\n      800 |     85.431   |      85.263  |  -0.168  |  -0.2   |\n--------------------------------------------------------------\n\n* 4 CPUs\n\nNumber of | without      | with         | diff     | diff    |\nprocesses | Marker [Sec] | Marker [Sec] |   [Sec]  |   [%]   |\n--------------------------------------------------------------\n       50 |      2.586   |       2.584  |  -0.003  |  -0.1   |\n      100 |      5.254   |       5.283  |  +0.030  |  +0.56  |\n      150 |      8.012   |       8.074  |  +0.061  |  +0.76  |\n      200 |     11.172   |      11.000  |  -0.172  |  -1.54  |\n      250 |     13.917   |      14.036  |  +0.119  |  +0.86  |\n      300 |     16.905   |      16.543  |  -0.362  |  -2.14  |\n      350 |     19.901   |      20.036  |  +0.135  |  +0.68  |\n      400 |     22.908   |      23.094  |  +0.186  |  +0.81  |\n      450 |     26.273   |      26.101  |  -0.172  |  -0.66  |\n      500 |     29.554   |      29.092  |  -0.461  |  -1.56  |\n      550 |     32.377   |      32.274  |  -0.103  |  -0.32  |\n      600 |     35.855   |      35.322  |  -0.533  |  -1.49  |\n      650 |     39.192   |      38.388  |  -0.804  |  -2.05  |\n      700 |     41.744   |      41.719  |  -0.025  |  -0.06  |\n      750 |     45.016   |      44.496  |  -0.520  |  -1.16  |\n      800 |     48.212   |      47.603  |  -0.609  |  -1.26  |\n--------------------------------------------------------------\n\n* 8 CPUs\n\nNumber of | without      | with         | diff     | diff    |\nprocesses | Marker [Sec] | Marker [Sec] |   [Sec]  |   [%]   |\n--------------------------------------------------------------\n       50 |      2.094   |       2.072  |  -0.022  |  -1.07  |\n      100 |      4.162   |       4.273  |  +0.111  |  +2.66  |\n      150 |      6.485   |       6.540  |  +0.055  |  +0.84  |\n      200 |      8.556   |       8.478  |  -0.078  |  -0.91  |\n      250 |     10.458   |      10.258  |  -0.200  |  -1.91  |\n      300 |     12.425   |      12.750  |  +0.325  |  +2.62  |\n      350 |     14.807   |      14.839  |  +0.032  |  +0.22  |\n      400 |     16.801   |      16.959  |  +0.158  |  +0.94  |\n      450 |     19.478   |      19.009  |  -0.470  |  -2.41  |\n      500 |     21.296   |      21.504  |  +0.208  |  +0.98  |\n      550 |     23.842   |      23.979  |  +0.137  |  +0.57  |\n      600 |     26.309   |      26.111  |  -0.198  |  -0.75  |\n      650 |     28.705   |      28.446  |  -0.259  |  -0.9   |\n      700 |     31.233   |      31.394  |  +0.161  |  +0.52  |\n      750 |     34.064   |      33.720  |  -0.344  |  -1.01  |\n      800 |     36.320   |      36.114  |  -0.206  |  -0.57  |\n--------------------------------------------------------------\n\nSigned-off-by: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nAcked-by: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nAcked-by: \u0027Peter Zijlstra\u0027 \u003cpeterz@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    }
  ]
}
