)]}'
{
  "log": [
    {
      "commit": "b67bfe0d42cac56c512dd5da4b1b347a23f4b70a",
      "tree": "3d465aea12b97683f26ffa38eba8744469de9997",
      "parents": [
        "1e142b29e210b5dfb2deeb6ce2210b60af16d2a6"
      ],
      "author": {
        "name": "Sasha Levin",
        "email": "sasha.levin@oracle.com",
        "time": "Wed Feb 27 17:06:00 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 27 19:10:24 2013 -0800"
      },
      "message": "hlist: drop the node parameter from iterators\n\nI\u0027m not sure why, but the hlist for each entry iterators were conceived\n\n        list_for_each_entry(pos, head, member)\n\nThe hlist ones were greedy and wanted an extra parameter:\n\n        hlist_for_each_entry(tpos, pos, head, member)\n\nWhy did they need an extra pos parameter? I\u0027m not quite sure. Not only\nthey don\u0027t really need it, it also prevents the iterator from looking\nexactly like the list iterator, which is unfortunate.\n\nBesides the semantic patch, there was some manual work required:\n\n - Fix up the actual hlist iterators in linux/list.h\n - Fix up the declaration of other iterators based on the hlist ones.\n - A very small amount of places were using the \u0027node\u0027 parameter, this\n was modified to use \u0027obj-\u003emember\u0027 instead.\n - Coccinelle didn\u0027t handle the hlist_for_each_entry_safe iterator\n properly, so those had to be fixed up manually.\n\nThe semantic patch which is mostly the work of Peter Senna Tschudin is here:\n\n@@\niterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;\n\ntype T;\nexpression a,c,d,e;\nidentifier b;\nstatement S;\n@@\n\n-T b;\n    \u003c+... when !\u003d b\n(\nhlist_for_each_entry(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue(a,\n- b,\nc) S\n|\nhlist_for_each_entry_from(a,\n- b,\nc) S\n|\nhlist_for_each_entry_rcu(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_rcu_bh(a,\n- b,\nc, d) S\n|\nhlist_for_each_entry_continue_rcu_bh(a,\n- b,\nc) S\n|\nfor_each_busy_worker(a, c,\n- b,\nd) S\n|\nax25_uid_for_each(a,\n- b,\nc) S\n|\nax25_for_each(a,\n- b,\nc) S\n|\ninet_bind_bucket_for_each(a,\n- b,\nc) S\n|\nsctp_for_each_hentry(a,\n- b,\nc) S\n|\nsk_for_each(a,\n- b,\nc) S\n|\nsk_for_each_rcu(a,\n- b,\nc) S\n|\nsk_for_each_from\n-(a, b)\n+(a)\nS\n+ sk_for_each_from(a) S\n|\nsk_for_each_safe(a,\n- b,\nc, d) S\n|\nsk_for_each_bound(a,\n- b,\nc) S\n|\nhlist_for_each_entry_safe(a,\n- b,\nc, d, e) S\n|\nhlist_for_each_entry_continue_rcu(a,\n- b,\nc) S\n|\nnr_neigh_for_each(a,\n- b,\nc) S\n|\nnr_neigh_for_each_safe(a,\n- b,\nc, d) S\n|\nnr_node_for_each(a,\n- b,\nc) S\n|\nnr_node_for_each_safe(a,\n- b,\nc, d) S\n|\n- for_each_gfn_sp(a, c, d, b) S\n+ for_each_gfn_sp(a, c, d) S\n|\n- for_each_gfn_indirect_valid_sp(a, c, d, b) S\n+ for_each_gfn_indirect_valid_sp(a, c, d) S\n|\nfor_each_host(a,\n- b,\nc) S\n|\nfor_each_host_safe(a,\n- b,\nc, d) S\n|\nfor_each_mesh_entry(a,\n- b,\nc, d) S\n)\n    ...+\u003e\n\n[akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]\n[akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]\n[akpm@linux-foundation.org: checkpatch fixes]\n[akpm@linux-foundation.org: fix warnings]\n[akpm@linux-foudnation.org: redo intrusive kvm changes]\nTested-by: Peter Senna Tschudin \u003cpeter.senna@gmail.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Sasha Levin \u003csasha.levin@oracle.com\u003e\nCc: Wu Fengguang \u003cfengguang.wu@intel.com\u003e\nCc: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nCc: Gleb Natapov \u003cgleb@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8c189ea64eea01ca20d102ddb74d6936dd16c579",
      "tree": "7836952a838205f0e87327e58fe5e51c48ed01be",
      "parents": [
        "f431b634f24d099872e78acc356c7fd35913b36b"
      ],
      "author": {
        "name": "Steven Rostedt (Red Hat)",
        "email": "rostedt@goodmis.org",
        "time": "Wed Feb 13 15:18:38 2013 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Feb 18 23:09:26 2013 -0500"
      },
      "message": "ftrace: Call ftrace cleanup module notifier after all other notifiers\n\nCommit: c1bf08ac \"ftrace: Be first to run code modification on modules\"\n\nchanged ftrace module notifier\u0027s priority to INT_MAX in order to\nprocess the ftrace nops before anything else could touch them\n(namely kprobes). This was the correct thing to do.\n\nUnfortunately, the ftrace module notifier also contains the ftrace\nclean up code. As opposed to the set up code, this code should be\nrun *after* all the module notifiers have run in case a module is doing\ncorrect clean-up and unregisters its ftrace hooks. Basically, ftrace\nneeds to do clean up on module removal, as it needs to know about code\nbeing removed so that it doesn\u0027t try to modify that code. But after it\nremoves the module from its records, if a ftrace user tries to remove\na probe, that removal will fail due as the record of that code segment\nno longer exists.\n\nNothing really bad happens if the probe removal is called after ftrace\ndid the clean up, but the ftrace removal function will return an error.\nCorrect code (such as kprobes) will produce a WARN_ON() if it fails\nto remove the probe. As people get annoyed by frivolous warnings, it\u0027s\nbest to do the ftrace clean up after everything else.\n\nBy splitting the ftrace_module_notifier into two notifiers, one that\ndoes the module load setup that is run at high priority, and the other\nthat is called for module clean up that is run at low priority, the\nproblem is solved.\n\nCc: stable@vger.kernel.org\nReported-by: Frank Ch. Eigler \u003cfche@redhat.com\u003e\nAcked-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "edc15cafcbfa3d73f819cae99885a2e35e4cbce5",
      "tree": "964e0de8816e6d4b602318d90718770921e301d2",
      "parents": [
        "e46cbf75c621725964fe1f6e7013e8bcd86a0e3d"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 02 17:47:21 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jan 22 23:38:01 2013 -0500"
      },
      "message": "tracing: Avoid unnecessary multiple recursion checks\n\nWhen function tracing occurs, the following steps are made:\n  If arch does not support a ftrace feature:\n   call internal function (uses INTERNAL bits) which calls...\n  If callback is registered to the \"global\" list, the list\n   function is called and recursion checks the GLOBAL bits.\n   then this function calls...\n  The function callback, which can use the FTRACE bits to\n   check for recursion.\n\nNow if the arch does not suppport a feature, and it calls\nthe global list function which calls the ftrace callback\nall three of these steps will do a recursion protection.\nThere\u0027s no reason to do one if the previous caller already\ndid. The recursion that we are protecting against will\ngo through the same steps again.\n\nTo prevent the multiple recursion checks, if a recursion\nbit is set that is higher than the MAX bit of the current\ncheck, then we know that the check was made by the previous\ncaller, and we can skip the current check.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "c29f122cd7fc178b72b1335b1fce0dff2e5c0f5d",
      "tree": "450f3888c9f663298231a29d6a1e63269f815fd0",
      "parents": [
        "0a016409e42f273415f8225ddf2c58eb2df88034"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 02 17:17:59 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jan 22 23:38:00 2013 -0500"
      },
      "message": "ftrace: Add context level recursion bit checking\n\nCurrently for recursion checking in the function tracer, ftrace\ntests a task_struct bit to determine if the function tracer had\nrecursed or not. If it has, then it will will return without going\nfurther.\n\nBut this leads to races. If an interrupt came in after the bit\nwas set, the functions being traced would see that bit set and\nthink that the function tracer recursed on itself, and would return.\n\nInstead add a bit for each context (normal, softirq, irq and nmi).\n\nA check of which context the task is in is made before testing the\nassociated bit. Now if an interrupt preempts the function tracer\nafter the previous context has been set, the interrupt functions\ncan still be traced.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "0a016409e42f273415f8225ddf2c58eb2df88034",
      "tree": "d18d106e6041e516d8ffa05e2bb62d76306c6afd",
      "parents": [
        "9640388b63556b4cfecbb5aaf91a5c99d272f429"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 02 17:03:03 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jan 22 23:37:59 2013 -0500"
      },
      "message": "ftrace: Optimize the function tracer list loop\n\nThere is lots of places that perform:\n\n       op \u003d rcu_dereference_raw(ftrace_control_list);\n       while (op !\u003d \u0026ftrace_list_end) {\n\nAdd a helper macro to do this, and also optimize for a single\nentity. That is, gcc will optimize a loop for either no iterations\nor more than one iteration. But usually only a single callback\nis registered to the function tracer, thus the optimized case\nshould be a single pass. to do this we now do:\n\n\top \u003d rcu_dereference_raw(list);\n\tdo {\n\t\t[...]\n\t} while (likely(op \u003d rcu_dereference_raw((op)-\u003enext)) \u0026\u0026\n\t       unlikely((op) !\u003d \u0026ftrace_list_end));\n\nAn op is always registered (ftrace_list_end when no callbacks is\nregistered), thus when a single callback is registered, the link\nlist looks like:\n\n top \u003d\u003e callback \u003d\u003e ftrace_list_end \u003d\u003e NULL.\n\nThe likely(op \u003d op-\u003enext) still must be performed due to the race\nof removing the callback, where the first op assignment could\nequal ftrace_list_end. In that case, the op-\u003enext would be NULL.\nBut this is unlikely (only happens in a race condition when\nremoving the callback).\n\nBut it is very likely that the next op would be ftrace_list_end,\nunless more than one callback has been registered. This tells\ngcc what the most common case is and makes the fast path with\nthe least amount of branches.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "6350379452ccaeaa71734adf57dec2ebc9207849",
      "tree": "58873a5c9c3d7c2b9b29d56482a87a4392ecb8a2",
      "parents": [
        "05cbbf643b8eea1be21082c53cdb856d1dc6d765"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 02 16:58:56 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jan 22 23:37:57 2013 -0500"
      },
      "message": "ftrace: Fix global function tracers that are not recursion safe\n\nIf one of the function tracers set by the global ops is not recursion\nsafe, it can still be called directly without the added recursion\nsupplied by the ftrace infrastructure.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "06aeaaeabf69da4a3e86df532425640f51b01cef",
      "tree": "e1ff9ec31435102d3f3ba665ce02de49879794f5",
      "parents": [
        "8741db532e86da2e54f05be751bfe1922ca63d57"
      ],
      "author": {
        "name": "Masami Hiramatsu",
        "email": "masami.hiramatsu.pt@hitachi.com",
        "time": "Fri Sep 28 17:15:17 2012 +0900"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Jan 21 13:22:35 2013 -0500"
      },
      "message": "ftrace: Move ARCH_SUPPORTS_FTRACE_SAVE_REGS in Kconfig\n\nMove SAVE_REGS support flag into Kconfig and rename\nit to CONFIG_DYNAMIC_FTRACE_WITH_REGS. This also introduces\nCONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS which indicates\nthe architecture depending part of ftrace has a code\nthat saves full registers.\nOn the other hand, CONFIG_DYNAMIC_FTRACE_WITH_REGS indicates\nthe code is enabled.\n\nLink: http://lkml.kernel.org/r/20120928081516.3560.72534.stgit@ltc138.sdl.hitachi.co.jp\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "c1bf08ac26e92122faab9f6c32ea8aba94612dae",
      "tree": "3d950c0592ad2394d8e1230d463024cf2d18bebc",
      "parents": [
        "7d1f9aeff1ee4a20b1aeb377dd0f579fe9647619"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 14 09:48:15 2012 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Jan 21 13:21:50 2013 -0500"
      },
      "message": "ftrace: Be first to run code modification on modules\n\nIf some other kernel subsystem has a module notifier, and adds a kprobe\nto a ftrace mcount point (now that kprobes work on ftrace points),\nwhen the ftrace notifier runs it will fail and disable ftrace, as well\nas kprobes that are attached to ftrace points.\n\nHere\u0027s the error:\n\n WARNING: at kernel/trace/ftrace.c:1618 ftrace_bug+0x239/0x280()\n Hardware name: Bochs\n Modules linked in: fat(+) stap_56d28a51b3fe546293ca0700b10bcb29__8059(F) nfsv4 auth_rpcgss nfs dns_resolver fscache xt_nat iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack lockd sunrpc ppdev parport_pc parport microcode virtio_net i2c_piix4 drm_kms_helper ttm drm i2c_core [last unloaded: bid_shared]\n Pid: 8068, comm: modprobe Tainted: GF            3.7.0-0.rc8.git0.1.fc19.x86_64 #1\n Call Trace:\n  [\u003cffffffff8105e70f\u003e] warn_slowpath_common+0x7f/0xc0\n  [\u003cffffffff81134106\u003e] ? __probe_kernel_read+0x46/0x70\n  [\u003cffffffffa0180000\u003e] ? 0xffffffffa017ffff\n  [\u003cffffffffa0180000\u003e] ? 0xffffffffa017ffff\n  [\u003cffffffff8105e76a\u003e] warn_slowpath_null+0x1a/0x20\n  [\u003cffffffff810fd189\u003e] ftrace_bug+0x239/0x280\n  [\u003cffffffff810fd626\u003e] ftrace_process_locs+0x376/0x520\n  [\u003cffffffff810fefb7\u003e] ftrace_module_notify+0x47/0x50\n  [\u003cffffffff8163912d\u003e] notifier_call_chain+0x4d/0x70\n  [\u003cffffffff810882f8\u003e] __blocking_notifier_call_chain+0x58/0x80\n  [\u003cffffffff81088336\u003e] blocking_notifier_call_chain+0x16/0x20\n  [\u003cffffffff810c2a23\u003e] sys_init_module+0x73/0x220\n  [\u003cffffffff8163d719\u003e] system_call_fastpath+0x16/0x1b\n ---[ end trace 9ef46351e53bbf80 ]---\n ftrace failed to modify [\u003cffffffffa0180000\u003e] init_once+0x0/0x20 [fat]\n  actual: cc:bb:d2:4b:e1\n\nA kprobe was added to the init_once() function in the fat module on load.\nBut this happened before ftrace could have touched the code. As ftrace\ndidn\u0027t run yet, the kprobe system had no idea it was a ftrace point and\nsimply added a breakpoint to the code (0xcc in the cc:bb:d2:4b:e1).\n\nThen when ftrace went to modify the location from a call to mcount/fentry\ninto a nop, it didn\u0027t see a call op, but instead it saw the breakpoint op\nand not knowing what to do with it, ftrace shut itself down.\n\nThe solution is to simply give the ftrace module notifier the max priority.\nThis should have been done regardless, as the core code ftrace modification\nalso happens very early on in boot up. This makes the module modification\ncloser to core modification.\n\nLink: http://lkml.kernel.org/r/20130107140333.593683061@goodmis.org\n\nCc: stable@vger.kernel.org\nAcked-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nReported-by: Frank Ch. Eigler \u003cfche@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "965c8e59cfcf845ecde2265a1d1bfee5f011d302",
      "tree": "22758a99b4ecb475750966d5202200dc0e89876c",
      "parents": [
        "c0f041602c33bae10b8e321c49024490d03ced3d"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Mon Dec 17 15:59:39 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Dec 17 17:15:12 2012 -0800"
      },
      "message": "lseek: the \"whence\" argument is called \"whence\"\n\nBut the kernel decided to call it \"origin\" instead.  Fix most of the\nsites.\n\nAcked-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2013a13e68354e0c8f3696b69701803e13fb737",
      "tree": "a7e1da6bfad1aa2afd83f401874d606269ce90b4",
      "parents": [
        "dadfab4873256d2145640c0ce468fcbfb48977fe",
        "106f9d9337f65bd428c0c79f650e3489e458d771"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 13 12:00:02 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 13 12:00:02 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\nPull trivial branch from Jiri Kosina:\n \"Usual stuff -- comment/printk typo fixes, documentation updates, dead\n  code elimination.\"\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)\n  HOWTO: fix double words typo\n  x86 mtrr: fix comment typo in mtrr_bp_init\n  propagate name change to comments in kernel source\n  doc: Update the name of profiling based on sysfs\n  treewide: Fix typos in various drivers\n  treewide: Fix typos in various Kconfig\n  wireless: mwifiex: Fix typo in wireless/mwifiex driver\n  messages: i2o: Fix typo in messages/i2o\n  scripts/kernel-doc: check that non-void fcts describe their return value\n  Kernel-doc: Convention: Use a \"Return\" section to describe return values\n  radeon: Fix typo and copy/paste error in comments\n  doc: Remove unnecessary declarations from Documentation/accounting/getdelays.c\n  various: Fix spelling of \"asynchronous\" in comments.\n  Fix misspellings of \"whether\" in comments.\n  eisa: Fix spelling of \"asynchronous\".\n  various: Fix spelling of \"registered\" in comments.\n  doc: fix quite a few typos within Documentation\n  target: iscsi: fix comment typos in target/iscsi drivers\n  treewide: fix typo of \"suport\" in various comments and Kconfig\n  treewide: fix typo of \"suppport\" in various comments\n  ...\n"
    },
    {
      "commit": "da830e589a45f0c42eef6f3cbd07275f8893f181",
      "tree": "b241c86b8a0f9acdef4b90f69ddd200548e91f2c",
      "parents": [
        "090f8ccba37034cec5a5972a70abeaae7eb0222b",
        "08cd2a6960ae2e1aa7f44b44ebafa84f503a2dd1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 11 18:18:58 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 11 18:18:58 2012 -0800"
      },
      "message": "Merge branch \u0027perf-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull perf fixes from Ingo Molnar:\n \"These are late-v3.7 pending fixes for tracing.\"\n\nFix up trivial conflict in kernel/trace/ring_buffer.c: the NULL pointer\nfix clashed with the change of type of the \u0027ret\u0027 variable.\n\n* \u0027perf-urgent-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  ring-buffer: Fix race between integrity check and readers\n  ring-buffer: Fix NULL pointer if rb_set_head_page() fails\n  ftrace: Clear bits properly in reset_iter_read()\n"
    },
    {
      "commit": "6d49e352ae9aed3f599041b0c0389aa924815f14",
      "tree": "3b09be4f4c4544a0e602d1f41eb24bde5143496c",
      "parents": [
        "817eecbf8230982ec0fbf0718e06a489b67dcbcf"
      ],
      "author": {
        "name": "Nadia Yvette Chambers",
        "email": "nyc@holomorphy.com",
        "time": "Thu Dec 06 10:39:54 2012 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Dec 06 10:39:54 2012 +0100"
      },
      "message": "propagate name change to comments in kernel source\n\nI\u0027ve legally changed my name with New York State, the US Social Security\nAdministration, et al. This patch propagates the name change and change\nin initials and login to comments in the kernel source as well.\n\nSigned-off-by: Nadia Yvette Chambers \u003cnyc@holomorphy.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "70f77b3f7ec010ff9624c1f2e39a81babc9e2429",
      "tree": "a47ad8d3c846b8418919a2cfdfbf6424ff041767",
      "parents": [
        "18423d3562f396206e0928a71177eeb2edfed077"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Sat Jun 09 19:10:27 2012 +0300"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Nov 15 16:10:17 2012 -0500"
      },
      "message": "ftrace: Clear bits properly in reset_iter_read()\n\nThere is a typo here where \u0027\u0026\u0027 is used instead of \u0027|\u0027 and it turns the\nstatement into a noop.  The original code is equivalent to:\n\n\titer-\u003eflags \u0026\u003d ~((1 \u003c\u003c 2) \u0026 (1 \u003c\u003c 4));\n\nLink: http://lkml.kernel.org/r/20120609161027.GD6488@elgon.mountain\n\nCc: stable@vger.kernel.org # all of them\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "6f4156723c084bfc0c0f72205c541fafb8ad3ded",
      "tree": "1852fb096d1f45a6d826480b41f9d7eb292c4e8a",
      "parents": [
        "bcd83ea6cbfee54e33d1527b87538dc99ca2137b"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Oct 05 12:13:07 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Oct 31 16:45:24 2012 -0400"
      },
      "message": "tracing: Allow tracers to start at core initcall\n\nThere\u0027s times during debugging that it is helpful to see traces of early\nboot functions. But the tracers are initialized at device_initcall()\nwhich is quite late during the boot process. Setting the kernel command\nline parameter ftrace\u003dfunction will not show anything until the function\ntracer is initialized. This prevents being able to trace functions before\ndevice_initcall().\n\nThere\u0027s no reason that the tracers need to be initialized so late in the\nboot process. Move them up to core_initcall() as they still need to come\nafter early_initcall() which initializes the tracing buffers.\n\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "bcd83ea6cbfee54e33d1527b87538dc99ca2137b",
      "tree": "58014b08a1ff10c88df4b6386f105ccdb5681f71",
      "parents": [
        "95d18aa2b6c05351181934b3bc34ce038cc7b637"
      ],
      "author": {
        "name": "Daniel Walter",
        "email": "sahne@0x90.at",
        "time": "Wed Sep 26 22:08:38 2012 +0200"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Oct 31 16:45:23 2012 -0400"
      },
      "message": "tracing: Replace strict_strto* with kstrto*\n\n * remove old string conversions with kstrto*\n\nLink: http://lkml.kernel.org/r/20120926200838.GC1244@0x90.at\n\nSigned-off-by: Daniel Walter \u003csahne@0x90.at\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "647664eaf4033501739ac1f42dd52ce8c9266ccc",
      "tree": "64497e4aedb7ec643cf5026d6cc5e1b9de77dcb2",
      "parents": [
        "ad97772ad82f57c83968079d0880c71ab126ab04"
      ],
      "author": {
        "name": "Masami Hiramatsu",
        "email": "masami.hiramatsu.pt@hitachi.com",
        "time": "Tue Jun 05 19:28:08 2012 +0900"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jul 31 10:29:55 2012 -0400"
      },
      "message": "ftrace: add ftrace_set_filter_ip() for address based filter\n\nAdd a new filter update interface ftrace_set_filter_ip()\nto set ftrace filter by ip address, not only glob pattern.\n\nLink: http://lkml.kernel.org/r/20120605102808.27845.67952.stgit@localhost.localdomain\n\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\nCc: \"Frank Ch. Eigler\" \u003cfche@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ea701f11da44b44907af226fe5a5f57d2f26eeb2",
      "tree": "bed777e80fb81b28903fe4a64cb90164e499a178",
      "parents": [
        "47239c4d8d6a24796039cada69d477a2b8cac9d6"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Jul 20 13:08:05 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jul 31 10:29:54 2012 -0400"
      },
      "message": "ftrace: Add selftest to test function trace recursion protection\n\nAdd selftests to test the function tracing recursion protection actually\ndoes work. It also tests if a ftrace_ops states it will perform its own\nprotection. Although, even if the ftrace_ops states it will protect itself,\nthe ftrace infrastructure may still provide protection if the arch does\nnot support all features or another ftrace_ops is registered.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "4740974a6844156c14d741b0080b59d275679a23",
      "tree": "7272f577c74a185d9fe037a424d0401e4ec7c126",
      "parents": [
        "5767cfeaa9ec7b67c802143394f3ad9f8b174eb8"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Jul 20 11:04:44 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jul 31 10:29:52 2012 -0400"
      },
      "message": "ftrace: Add default recursion protection for function tracing\n\nAs more users of the function tracer utility are being added, they do\nnot always add the necessary recursion protection. To protect from\nfunction recursion due to tracing, if the callback ftrace_ops does not\nspecifically specify that it protects against recursion (by setting\nthe FTRACE_OPS_FL_RECURSION_SAFE flag), the list operation will be\ncalled by the mcount trampoline which adds recursion protection.\n\nIf the flag is set, then the function will be called directly with no\nextra protection.\n\nNote, the list operation is called if more than one function callback\nis registered, or if the arch does not support all of the function\ntracer features.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "08f6fba503111e0336f2b4d6915a4a18f9b60e51",
      "tree": "119f971348614154552b70fb5cbe358f7c532a18",
      "parents": [
        "28fb5dfa783c25dbeeb25a72663f8066a3a517f5"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Apr 30 16:20:23 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 19 13:20:03 2012 -0400"
      },
      "message": "ftrace/x86: Add separate function to save regs\n\nAdd a way to have different functions calling different trampolines.\nIf a ftrace_ops wants regs saved on the return, then have only the\nfunctions with ops registered to save regs. Functions registered by\nother ops would not be affected, unless the functions overlap.\n\nIf one ftrace_ops registered functions A, B and C and another ops\nregistered fucntions to save regs on A, and D, then only functions\nA and D would be saving regs. Function B and C would work as normal.\nAlthough A is registered by both ops: normal and saves regs; this is fine\nas saving the regs is needed to satisfy one of the ops that calls it\nbut the regs are ignored by the other ops function.\n\nx86_64 implements the full regs saving, and i386 just passes a NULL\nfor regs to satisfy the ftrace_ops passing. Where an arch must supply\nboth regs and ftrace_ops parameters, even if regs is just NULL.\n\nIt is OK for an arch to pass NULL regs. All function trace users that\nrequire regs passing must add the flag FTRACE_OPS_FL_SAVE_REGS when\nregistering the ftrace_ops. If the arch does not support saving regs\nthen the ftrace_ops will fail to register. The flag\nFTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED may be set that will prevent the\nftrace_ops from failing to register. In this case, the handler may\neither check if regs is not NULL or check if ARCH_SUPPORTS_FTRACE_SAVE_REGS.\nIf the arch supports passing regs it will set this macro and pass regs\nfor ops that request them. All other archs will just pass NULL.\n\nLink: Link: http://lkml.kernel.org/r/20120711195745.107705970@goodmis.org\n\nCc: Alexander van Heukelum \u003cheukelum@fastmail.fm\u003e\nReviewed-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a1e2e31d175a1349274eba3465d17616c6725f8c",
      "tree": "5f92ba7a822f8a9911aa50157f796213bfac4ebb",
      "parents": [
        "ccf3672d530170c98c734dfc5db07d64bcbad2ad"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Aug 09 12:50:46 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 19 13:18:49 2012 -0400"
      },
      "message": "ftrace: Return pt_regs to function trace callback\n\nReturn as the 4th paramater to the function tracer callback the pt_regs.\n\nLater patches that implement regs passing for the architectures will require\nhaving the ftrace_ops set the SAVE_REGS flag, which will tell the arch\nto take the time to pass a full set of pt_regs to the ftrace_ops callback\nfunction. If the arch does not support it then it should pass NULL.\n\nIf an arch can pass full regs, then it should define:\n ARCH_SUPPORTS_FTRACE_SAVE_REGS to 1\n\nLink: http://lkml.kernel.org/r/20120702201821.019966811@goodmis.org\n\nReviewed-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ccf3672d530170c98c734dfc5db07d64bcbad2ad",
      "tree": "0cbe9a0856429412b9e026baf77cec9e117c6896",
      "parents": [
        "2f5f6ad9390c1ebbf738d130dbfe80b60eaa167e"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Jun 05 09:44:25 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 19 13:18:22 2012 -0400"
      },
      "message": "ftrace: Consolidate arch dependent functions with \u0027list\u0027 function\n\nAs the function tracer starts to get more features, the support for\ntheses features will spread out throughout the different architectures\nover time. These features boil down to what each arch does in the\nmcount trampoline (the ftrace_caller).\n\nCurrently there\u0027s two features that are not the same throughout the\narchs.\n\n 1) Support to stop function tracing before the callback\n 2) passing of the ftrace ops\n\nBoth of these require placing an indirect function to support the\nfeatures if the mcount trampoline does not.\n\nOn a side note, for all architectures, when more than one callback\nis registered to the function tracer, an intermediate \u0027list\u0027 function\nis called by the mcount trampoline to iterate through the callbacks\nthat are registered.\n\nInstead of making a separate function for each of these features,\nand requiring several indirect calls, just use the single \u0027list\u0027 function\nas the intermediate, to handle all cases. If an arch does not support\nthe \u0027stop function tracing\u0027 or the passing of ftrace ops, just force\nit to use the list function that will handle the features required.\n\nThis makes the code cleaner and simpler and removes a lot of\n #ifdefs in the code.\n\nLink: http://lkml.kernel.org/r/20120612225424.495625483@goodmis.org\n\nReviewed-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "2f5f6ad9390c1ebbf738d130dbfe80b60eaa167e",
      "tree": "1a88c37725d3efbcde8fa0a3cf19490d793877f0",
      "parents": [
        "6e0f17be0361444862637e8986c8c1a3b3f8dcf8"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Aug 08 16:57:47 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 19 13:17:35 2012 -0400"
      },
      "message": "ftrace: Pass ftrace_ops as third parameter to function trace callback\n\nCurrently the function trace callback receives only the ip and parent_ip\nof the function that it traced. It would be more powerful to also return\nthe ops that registered the function as well. This allows the same function\nto act differently depending on what ftrace_ops registered it.\n\nLink: http://lkml.kernel.org/r/20120612225424.267254552@goodmis.org\n\nReviewed-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "8d240dd88cca33b704adf3fe281aa64b5aac2dd8",
      "tree": "ed9431274d1274e134207edb5604669bbf638b73",
      "parents": [
        "e2b297fcf17fc03734e93387fb8195c782286b35"
      ],
      "author": {
        "name": "Borislav Petkov",
        "email": "bp@amd64.org",
        "time": "Thu Mar 29 19:11:40 2012 +0200"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jun 14 15:22:12 2012 -0400"
      },
      "message": "ftrace: Remove a superfluous check\n\nregister_ftrace_function() checks ftrace_disabled and calls\n__register_ftrace_function which does it again.\n\nDrop the first check and add the unlikely hint to the second one. Also,\ndrop the label as John correctly notices.\n\nNo functional change.\n\nLink: http://lkml.kernel.org/r/20120329171140.GE6409@aftab\n\nCc: Borislav Petkov \u003cbp@amd64.org\u003e\nCc: John Kacur \u003cjkacur@redhat.com\u003e\nSigned-off-by: Borislav Petkov \u003cborislav.petkov@amd.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "e4f5d5440bb860a3e8942ca8f7277a7f31798965",
      "tree": "324091109c5bbaae5a06e52a77369cf2731ebb54",
      "parents": [
        "8ed3e2cfe40ffe43630fd8efa34fc97c95b4c298"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 27 09:13:18 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 20:00:27 2012 -0400"
      },
      "message": "ftrace/x86: Have x86 ftrace use the ftrace_modify_all_code()\n\nTo remove duplicate code, have the ftrace arch_ftrace_update_code()\nuse the generic ftrace_modify_all_code(). This requires that the\ndefault ftrace_replace_code() becomes a weak function so that an\narch may override it.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "8ed3e2cfe40ffe43630fd8efa34fc97c95b4c298",
      "tree": "7460935d25c77dc13ef887dc664fd7529886665e",
      "parents": [
        "f0cf973a224a3e3c1dec3395af3ba01cf14b1ff4"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Apr 26 14:59:43 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 20:00:26 2012 -0400"
      },
      "message": "ftrace: Make ftrace_modify_all_code() global for archs to use\n\nRename __ftrace_modify_code() to ftrace_modify_all_code() and make\nit global for all archs to use. This will remove the duplication\nof code, as archs that can modify code without stop_machine()\ncan use it directly outside of the stop_machine() call.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "f0cf973a224a3e3c1dec3395af3ba01cf14b1ff4",
      "tree": "c8efdfadbf904ce9eaff942156bc3d0608375d7d",
      "parents": [
        "a650e02a528ab9d6d6f0b8b57745c32f2a138459"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Apr 25 14:39:54 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 19:58:49 2012 -0400"
      },
      "message": "ftrace: Return record ip addr for ftrace_location()\n\nftrace_location() is passed an addr, and returns 1 if the addr is\non a ftrace nop (or caller to ftrace_caller), and 0 otherwise.\n\nTo let kprobes know if it should move a breakpoint or not, it\nmust return the actual addr that is the start of the ftrace nop.\nThis way a kprobe placed on the location of a ftrace nop, can\ninstead be placed on the instruction after the nop. Even if the\nprobe addr is on the second or later byte of the nop, it can\nsimply be moved forward.\n\nCc: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a650e02a528ab9d6d6f0b8b57745c32f2a138459",
      "tree": "34bf32bc4c3b8ccec7e33dbe12a26d51075f779a",
      "parents": [
        "9644302e3315e7e36495d230d5ac7125a316d33e"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Apr 25 13:48:13 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 19:58:48 2012 -0400"
      },
      "message": "ftrace: Consolidate ftrace_location() and ftrace_text_reserved()\n\nBoth ftrace_location() and ftrace_text_reserved() do basically the same thing.\nThey search to see if an address is in the ftace table (contains an address\nthat may change from nop to call ftrace_caller). The difference is\nthat ftrace_location() searches a single address, but ftrace_text_reserved()\nsearches a range.\n\nThis also makes the ftrace_text_reserved() faster as it now uses a bsearch()\ninstead of linearly searching all the addresses within a page.\n\nCc: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "9644302e3315e7e36495d230d5ac7125a316d33e",
      "tree": "63695acb86c89f5617820937ed254d9638894eef",
      "parents": [
        "706c81f87f84adbcf1f6553b9e6b69b3e28fc35a"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Apr 25 10:14:43 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 19:58:46 2012 -0400"
      },
      "message": "ftrace: Speed up search by skipping pages by address\n\nAs all records in a page of the ftrace table are sorted, we can\nspeed up the search algorithm by checking if the address to look for\nfalls in between the first and last record ip on the page.\n\nThis speeds up both the ftrace_location() and ftrace_text_reserved()\nalgorithms, as it can skip full pages when the search address is\nnot in them.\n\nCc: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "706c81f87f84adbcf1f6553b9e6b69b3e28fc35a",
      "tree": "0075a28af7df96962e5e292784f6ee50d456f23d",
      "parents": [
        "9fd49328fc2a1cbfea542bcbcf004b5c81dc495b"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Apr 24 23:45:26 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 19:58:45 2012 -0400"
      },
      "message": "ftrace: Remove extra helper functions\n\nThe ftrace_record_ip() and ftrace_alloc_dyn_node() were from the\ntime of the ftrace daemon. Although they were still used, they\nstill make things a bit more complex than necessary.\n\nMove the code into the one function that uses it, and remove the\nhelper functions.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "9fd49328fc2a1cbfea542bcbcf004b5c81dc495b",
      "tree": "da8f42d3483da2b1b224d422db074cbe954b5cd3",
      "parents": [
        "71babb2705e2203a64c27ede13ae3508a0d2c16c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Apr 24 22:32:06 2012 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 16 19:58:44 2012 -0400"
      },
      "message": "ftrace: Sort all function addresses, not just per page\n\nInstead of just sorting the ip\u0027s of the functions per ftrace page,\nsort the entire list before adding them to the ftrace pages.\n\nThis will allow the bsearch algorithm to be sped up as it can\nalso sort by pages, not just records within a page.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "50e18b94c695644d824381e7574b9c44acc25ffe",
      "tree": "8e323cd188dfdf4882e963812a6b9caf8905cac0",
      "parents": [
        "b02ee9a33b65bcc4ad13c12a0b04afdaab3ddd8d"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Wed Apr 25 10:23:39 2012 +0200"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue May 08 21:04:12 2012 -0400"
      },
      "message": "tracing: Use seq_*_private interface for some seq files\n\nIt\u0027s appropriate to use __seq_open_private interface to open\nsome of trace seq files, because it covers all steps we are\nduplicating in tracing code - zallocating the iterator and\nsetting it as seq_file\u0027s private.\n\nUsing this for following files:\n  trace\n  available_filter_functions\n  enabled_functions\n\nLink: http://lkml.kernel.org/r/1335342219-2782-5-git-send-email-jolsa@redhat.com\n\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\n\n[\n Fixed warnings for:\n   kernel/trace/trace.c: In function \u0027__tracing_open\u0027:\n   kernel/trace/trace.c:2418:11: warning: unused variable \u0027ret\u0027 [-Wunused-variable]\n   kernel/trace/trace.c:2417:19: warning: unused variable \u0027m\u0027 [-Wunused-variable]\n]\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "db6544e0075d192e5ad16eda8689c55fa9c6f8f4",
      "tree": "5c48606c4769afc28bc8382d8ff3c6f2d14b0b03",
      "parents": [
        "b892e5c89787716b95a8e55d77d25a1c0748df10"
      ],
      "author": {
        "name": "Rajesh Bhagat",
        "email": "rajesh.lnx@gmail.com",
        "time": "Fri Feb 17 13:59:15 2012 +0530"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Mar 13 15:07:37 2012 -0400"
      },
      "message": "ftrace: Fix function_graph for archs that test ftrace_trace_function\n\nWhen CONFIG_DYNAMIC_FTRACE is not set, some archs (ARM) test\nthe variable function_trace_function to determine if it should\ncall the function tracer. If it is not set to ftrace_stub, then\nit will call the function and return, and not call the function\ngraph tracer.\n\nBut some of these archs (ARM) do not have the assembly code\nto test if function tracing is enabled or not (quick stop of tracing)\nand it calls the helper routine ftrace_test_stop_func() instead.\n\nIf function tracer is enabled and then disabled, the variable\nftrace_trace_function is still set to the helper routine\nftrace_test_stop_func(), and not to ftrace_stub. This will\nprevent the function graph tracer from ever running.\n\nOutput before patch\n/debug/tracing # echo function \u003e current_tracer\n/debug/tracing # echo function_graph \u003e current_tracer\n/debug/tracing # cat trace\n\nOutput after patch\n/debug/tracing # echo function \u003e current_tracer\n/debug/tracing # echo function_graph \u003e current_tracer\n/debug/tracing # cat trace\n0) ! 253.375 us | } /* irq_enter */\n0) | generic_handle_irq() {\n0) | handle_fasteoi_irq() {\n0) 9.208 us | _raw_spin_lock();\n0) | handle_irq_event() {\n0) | handle_irq_event_percpu() {\n\nSigned-off-by: Rajesh Bhagat \u003crajesh.lnx@gmail.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "5500fa51199aee770ce53718853732600543619e",
      "tree": "1c2ad241de8177670234cfed07acb30dba802b01",
      "parents": [
        "02aa3162edaa166a01d193f80ccde890be8b55da"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Wed Feb 15 15:51:54 2012 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Feb 21 11:08:30 2012 -0500"
      },
      "message": "ftrace, perf: Add filter support for function trace event\n\nAdding support to filter function trace event via perf\ninterface. It is now possible to use filter interface\nin the perf tool like:\n\n  perf record -e ftrace:function --filter\u003d\"(ip \u003d\u003d mm_*)\" ls\n\nThe filter syntax is restricted to the the \u0027ip\u0027 field only,\nand following operators are accepted \u0027\u003d\u003d\u0027 \u0027!\u003d\u0027 \u0027||\u0027, ending\nup with the filter strings like:\n\n  ip \u003d\u003d f1[, ]f2 ... || ip !\u003d f3[, ]f4 ...\n\nwith comma \u0027,\u0027 or space \u0027 \u0027 as a function separator. If the\nspace \u0027 \u0027 is used as a separator, the right side of the\nassignment needs to be enclosed in double quotes \u0027\"\u0027, e.g.:\n\n  perf record -e ftrace:function --filter \u0027(ip \u003d\u003d do_execve,sys_*,ext*)\u0027 ls\n  perf record -e ftrace:function --filter \u0027(ip \u003d\u003d \"do_execve,sys_*,ext*\")\u0027 ls\n  perf record -e ftrace:function --filter \u0027(ip \u003d\u003d \"do_execve sys_* ext*\")\u0027 ls\n\nThe \u0027\u003d\u003d\u0027 operator adds trace filter with same effect as would\nbe added via set_ftrace_filter file.\n\nThe \u0027!\u003d\u0027 operator adds trace filter with same effect as would\nbe added via set_ftrace_notrace file.\n\nThe right side of the \u0027!\u003d\u0027, \u0027\u003d\u003d\u0027 operators is list of functions\nor regexp. to be added to filter separated by space.\n\nThe \u0027||\u0027 operator is used for connecting multiple filter definitions\ntogether. It is possible to have more than one \u0027\u003d\u003d\u0027 and \u0027!\u003d\u0027\noperators within one filter string.\n\nLink: http://lkml.kernel.org/r/1329317514-8131-8-git-send-email-jolsa@redhat.com\n\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "e248491ac283b516958ca9ab62c8e74b6718bca8",
      "tree": "77e5a6589cf55ebeabe01a321d792e216162efe6",
      "parents": [
        "5b34926114e39e12005031269613d2b13194aeba"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Wed Feb 15 15:51:48 2012 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Feb 21 11:08:23 2012 -0500"
      },
      "message": "ftrace: Add enable/disable ftrace_ops control interface\n\nAdding a way to temporarily enable/disable ftrace_ops. The change\nfollows the same way as \u0027global\u0027 ftrace_ops are done.\n\nIntroducing 2 global ftrace_ops - control_ops and ftrace_control_list\nwhich take over all ftrace_ops registered with FTRACE_OPS_FL_CONTROL\nflag. In addition new per cpu flag called \u0027disabled\u0027 is also added to\nftrace_ops to provide the control information for each cpu.\n\nWhen ftrace_ops with FTRACE_OPS_FL_CONTROL is registered, it is\nset as disabled for all cpus.\n\nThe ftrace_control_list contains all the registered \u0027control\u0027 ftrace_ops.\nThe control_ops provides function which iterates ftrace_control_list\nand does the check for \u0027disabled\u0027 flag on current cpu.\n\nAdding 3 inline functions:\n  ftrace_function_local_disable/ftrace_function_local_enable\n  - enable/disable the ftrace_ops on current cpu\n  ftrace_function_local_disabled\n  - get disabled ftrace_ops::disabled value for current cpu\n\nLink: http://lkml.kernel.org/r/1329317514-8131-2-git-send-email-jolsa@redhat.com\n\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "47b0edcb599ea6eb9ef16d3a08932a0e01485293",
      "tree": "c72965c718a4e50a845c1e0ec898fc2d86825104",
      "parents": [
        "95100358491abaa2e9a5483811370059bbca4645"
      ],
      "author": {
        "name": "Thomas Meyer",
        "email": "thomas@m3y3r.de",
        "time": "Tue Nov 29 22:08:00 2011 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Feb 13 13:48:11 2012 -0500"
      },
      "message": "tracing/trivial: Use kcalloc instead of kzalloc to allocate array\n\nThe advantage of kcalloc is, that will prevent integer overflows which could\nresult from the multiplication of number of elements and size and it is also\na bit nicer to read.\n\nThe semantic patch that makes this change is available\nin https://lkml.org/lkml/2011/11/25/107\n\nLink: http://lkml.kernel.org/r/1322600880.1534.347.camel@localhost.localdomain\n\nSigned-off-by: Thomas Meyer \u003cthomas@m3y3r.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ac483c446b67870444c9eeaf8325d3d2af9b91bc",
      "tree": "e2765af4acf86ce986856b2963036138ae077d58",
      "parents": [
        "623ec991ce0e8cd5791bad656c162fa837635907"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Mon Jan 02 10:04:14 2012 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Feb 03 09:48:18 2012 -0500"
      },
      "message": "ftrace: Change filter/notrace set functions to return exit code\n\nCurrently the ftrace_set_filter and ftrace_set_notrace functions\ndo not return any return code. So there\u0027s no way for ftrace_ops\nuser to tell wether the filter was correctly applied.\n\nThe set_ftrace_filter interface returns error in case the filter\ndid not match:\n\n  # echo krava \u003e set_ftrace_filter\n  bash: echo: write error: Invalid argument\n\nChanging both ftrace_set_filter and ftrace_set_notrace functions\nto return zero if the filter was applied correctly or -E* values\nin case of error.\n\nLink: http://lkml.kernel.org/r/1325495060-6402-2-git-send-email-jolsa@redhat.com\n\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "2a85a37f168d2b4d74d493b578af4dc9032be92e",
      "tree": "26ed7136e9092e61ae693e117a540045ec5d54a0",
      "parents": [
        "d2d45c7a03a2b1a14159cbb665e9dd60991a7d4f"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 19 21:57:44 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:26:35 2011 -0500"
      },
      "message": "ftrace: Allow access to the boot time function enabling\n\nChange set_ftrace_early_filter() to ftrace_set_early_filter()\nand make it a global function. This will allow other subsystems\nin the kernel to be able to enable function tracing at start\nup and reuse the ftrace function parsing code.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "69a3083c4a7df0322d97bb2b43a33cb12af8131a",
      "tree": "96b0c48178e812819a2f8d8ccf4600997be41fbb",
      "parents": [
        "fc13cb0ce45296f331263a6034aa1814203e1ac3"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 19 15:21:16 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:25:24 2011 -0500"
      },
      "message": "ftrace: Decouple hash items from showing filtered functions\n\nThe set_ftrace_filter shows \"hashed\" functions, which are functions\nthat are added with operations to them (like traceon and traceoff).\n\nAs other subsystems may be able to show what functions they are\nusing for function tracing, the hash items should no longer\nbe shown just because the FILTER flag is set. As they have nothing\nto do with other subsystems filters.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "fc13cb0ce45296f331263a6034aa1814203e1ac3",
      "tree": "2c66d6296ee01bcbd27cb9df4b72885339300ba6",
      "parents": [
        "06a51d9307380c78bb5c92e68fc80ad2c7d7f890"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 19 14:41:25 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:25:06 2011 -0500"
      },
      "message": "ftrace: Allow other users of function tracing to use the output listing\n\nThe function tracer is set up to allow any other subsystem (like perf)\nto use it. Ftrace already has a way to list what functions are enabled\nby the global_ops. It would be very helpful to let other users of\nthe function tracer to be able to use the same code.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "06a51d9307380c78bb5c92e68fc80ad2c7d7f890",
      "tree": "e0f38e8780f92937e8f19f17b8bf9eff6bcc3137",
      "parents": [
        "c842e975520f8ab09e293cc92f51a1f396251fd5"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 19 19:07:36 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:23:11 2011 -0500"
      },
      "message": "ftrace: Create ftrace_hash_empty() helper routine\n\nThere are two types of hashes in the ftrace_ops; one type\nis the filter_hash and the other is the notrace_hash. Either\none may be null, meaning it has no elements. But when elements\nare added, the hash is allocated.\n\nThroughout the code, a check needs to be made to see if a hash\nexists or the hash has elements, but the check if the hash exists\nis usually missing causing the possible \"NULL pointer dereference bug\".\n\nAdd a helper routine called \"ftrace_hash_empty()\" that returns\ntrue if the hash doesn\u0027t exist or its count is zero. As they mean\nthe same thing.\n\nLast-bug-reported-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "c842e975520f8ab09e293cc92f51a1f396251fd5",
      "tree": "87102ee6a89cb30415927f43b7694e3ec5b127aa",
      "parents": [
        "5855fead9cc358adebd6bdeec202d040c623ae38"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Dec 19 18:44:44 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:21:43 2011 -0500"
      },
      "message": "ftrace: Fix ftrace hash record update with notrace\n\nWhen disabling the \"notrace\" records, that means we want to trace them.\nIf the notrace_hash is zero, it means that we want to trace all\nrecords. But to disable a zero notrace_hash means nothing.\n\nThe check for the notrace_hash count was incorrect with:\n\n\tif (hash \u0026\u0026 !hash-\u003ecount)\n\t\treturn\n\nWith the correct comment above it that states that we do nothing\nif the notrace_hash has zero count. But !hash also means that\nthe notrace hash has zero count. I think this was done to\nprotect against dereferencing NULL. But if !hash is true, then\nwe go through the following loop without doing a single thing.\n\nFix it to:\n\n\tif (!hash || !hash-\u003ecount)\n\t\treturn;\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "5855fead9cc358adebd6bdeec202d040c623ae38",
      "tree": "c95d272ff41b7873cc33feef3686ede3f020d4cd",
      "parents": [
        "68950619f8c82e468d8976130462617abea605a8"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 16 19:27:42 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:20:50 2011 -0500"
      },
      "message": "ftrace: Use bsearch to find record ip\n\nNow that each set of pages in the function list are sorted by\nip, we can use bsearch to find a record within each set of pages.\nThis speeds up the ftrace_location() function by magnitudes.\n\nFor archs (like x86) that need to add a breakpoint at every function\nthat will be converted from a nop to a callback and vice versa,\nthe breakpoint callback needs to know if the breakpoint was for\nftrace or not. It requires finding the breakpoint ip within the\nrecords. Doing a linear search is extremely inefficient. It is\na must to be able to do a fast binary search to find these locations.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "68950619f8c82e468d8976130462617abea605a8",
      "tree": "88a2a4ae266b0bad4335c9bb803b7feb76d71c90",
      "parents": [
        "85ae32ae019bc1c2cc22e5f51fe0c9f2812ef68c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 16 17:06:45 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:19:58 2011 -0500"
      },
      "message": "ftrace: Sort the mcount records on each page\n\nSort records by ip locations of the ftrace mcount calls on each of the\nset of pages in the function list. This helps in localizing cache\nusuage when updating the function locations, as well as gives us\nthe ability to quickly find an ip location in the list.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "85ae32ae019bc1c2cc22e5f51fe0c9f2812ef68c",
      "tree": "38ce2528dd0af0190e61cbf1dcc9f6d0c4ac3cf6",
      "parents": [
        "a79008755497daff157f5294c02e3b940641cc11"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 16 16:30:31 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:19:03 2011 -0500"
      },
      "message": "ftrace: Replace record newlist with record page list\n\nAs new functions come in to be initalized from mcount to nop,\nthey are done by groups of pages. Whether it is the core kernel\nor a module. There\u0027s no need to keep track of these on a per record\nbasis.\n\nAt startup, and as any module is loaded, the functions to be\ntraced are stored in a group of pages and added to the function\nlist at the end. We just need to keep a pointer to the first\npage of the list that was added, and use that to know where to\nstart on the list for initializing functions.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a79008755497daff157f5294c02e3b940641cc11",
      "tree": "941e16ae559cbe82f371d07c09b03642bb6e83dd",
      "parents": [
        "3208230983a0ee3d95be22d463257e530c684956"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 16 16:23:44 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:18:30 2011 -0500"
      },
      "message": "ftrace: Allocate the mcount record pages as groups\n\nAllocate the mcount record pages as a group of pages as big\nas can be allocated and waste no more than a single page.\n\nGrouping the mcount pages as much as possible helps with cache\nlocality, as we do not need to redirect with descriptors as we\ncross from page to page. It also allows us to do more with the\nrecords later on (sort them with bigger benefits).\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "3208230983a0ee3d95be22d463257e530c684956",
      "tree": "fdba765e348c53a4fd65094ac17e66061f0b8932",
      "parents": [
        "c88fd8634ea68e74c7d19fd2621b4078fd22864c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Dec 16 14:42:37 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:17:57 2011 -0500"
      },
      "message": "ftrace: Remove usage of \"freed\" records\n\nRecords that are added to the function trace table are\npermanently there, except for modules. By separating out the\nmodules to their own pages that can be freed in one shot\nwe can remove the \"freed\" flag and simplify some of the record\nmanagement.\n\nAnother benefit of doing this is that we can also move the\nrecords around; sort them.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "c88fd8634ea68e74c7d19fd2621b4078fd22864c",
      "tree": "9d8bbc57d20eec9869a9655ff79cc1c4d6359b88",
      "parents": [
        "45959ee7aa645815a5ce303a0ea1e48a21e67c6a"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Aug 16 09:53:39 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:16:58 2011 -0500"
      },
      "message": "ftrace: Allow archs to modify code without stop machine\n\nThe stop machine method to modify all functions in the kernel\n(some 20,000 of them) is the safest way to do so across all archs.\nBut some archs may not need this big hammer approach to modify code\non SMP machines, and can simply just update the code it needs.\n\nAdding a weak function arch_ftrace_update_code() that now does the\nstop machine, will also let any arch override this method.\n\nIf the arch needs to check the system and then decide if it can\navoid stop machine, it can still call ftrace_run_stop_machine() to\nuse the old method.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "30fb6aa74011dcf595f306ca2727254d708b786e",
      "tree": "cda3efc265f74c8d6496b2d976f528fcdc1cb81d",
      "parents": [
        "74eec26facadbe6dbc0621bc862892c915c4534f"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Mon Dec 05 18:22:48 2011 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Dec 21 07:09:14 2011 -0500"
      },
      "message": "ftrace: Fix unregister ftrace_ops accounting\n\nMultiple users of the function tracer can register their functions\nwith the ftrace_ops structure. The accounting within ftrace will\nupdate the counter on each function record that is being traced.\nWhen the ftrace_ops filtering adds or removes functions, the\nfunction records will be updated accordingly if the ftrace_ops is\nstill registered.\n\nWhen a ftrace_ops is removed, the counter of the function records,\nthat the ftrace_ops traces, are decremented. When they reach zero\nthe functions that they represent are modified to stop calling the\nmcount code.\n\nWhen changes are made, the code is updated via stop_machine() with\na command passed to the function to tell it what to do. There is an\nENABLE and DISABLE command that tells the called function to enable\nor disable the functions. But the ENABLE is really a misnomer as it\nshould just update the records, as records that have been enabled\nand now have a count of zero should be disabled.\n\nThe DISABLE command is used to disable all functions regardless of\ntheir counter values. This is the big off switch and is not the\ncomplement of the ENABLE command.\n\nTo make matters worse, when a ftrace_ops is unregistered and there\nis another ftrace_ops registered, neither the DISABLE nor the\nENABLE command are set when calling into the stop_machine() function\nand the records will not be updated to match their counter. A command\nis passed to that function that will update the mcount code to call\nthe registered callback directly if it is the only one left. This\nmeans that the ftrace_ops that is still registered will have its callback\ncalled by all functions that have been set for it as well as the ftrace_ops\nthat was just unregistered.\n\nHere\u0027s a way to trigger this bug. Compile the kernel with\nCONFIG_FUNCTION_PROFILER set and with CONFIG_FUNCTION_GRAPH not set:\n\n CONFIG_FUNCTION_PROFILER\u003dy\n # CONFIG_FUNCTION_GRAPH is not set\n\nThis will force the function profiler to use the function tracer instead\nof the function graph tracer.\n\n  # cd /sys/kernel/debug/tracing\n  # echo schedule \u003e set_ftrace_filter\n  # echo function \u003e current_tracer\n  # cat set_ftrace_filter\n schedule\n  # cat trace\n # tracer: nop\n #\n # entries-in-buffer/entries-written: 692/68108025   #P:4\n #\n #                              _-----\u003d\u003e irqs-off\n #                             / _----\u003d\u003e need-resched\n #                            | / _---\u003d\u003e hardirq/softirq\n #                            || / _--\u003d\u003e preempt-depth\n #                            ||| /     delay\n #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION\n #              | |       |   ||||       |         |\n      kworker/0:2-909   [000] ....   531.235574: schedule \u003c-worker_thread\n           \u003cidle\u003e-0     [001] .N..   531.235575: schedule \u003c-cpu_idle\n      kworker/0:2-909   [000] ....   531.235597: schedule \u003c-worker_thread\n             sshd-2563  [001] ....   531.235647: schedule \u003c-schedule_hrtimeout_range_clock\n\n  # echo 1 \u003e function_profile_enabled\n  # echo 0 \u003e function_porfile_enabled\n  # cat set_ftrace_filter\n schedule\n  # cat trace\n # tracer: function\n #\n # entries-in-buffer/entries-written: 159701/118821262   #P:4\n #\n #                              _-----\u003d\u003e irqs-off\n #                             / _----\u003d\u003e need-resched\n #                            | / _---\u003d\u003e hardirq/softirq\n #                            || / _--\u003d\u003e preempt-depth\n #                            ||| /     delay\n #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION\n #              | |       |   ||||       |         |\n           \u003cidle\u003e-0     [002] ...1   604.870655: local_touch_nmi \u003c-cpu_idle\n           \u003cidle\u003e-0     [002] d..1   604.870655: enter_idle \u003c-cpu_idle\n           \u003cidle\u003e-0     [002] d..1   604.870656: atomic_notifier_call_chain \u003c-enter_idle\n           \u003cidle\u003e-0     [002] d..1   604.870656: __atomic_notifier_call_chain \u003c-atomic_notifier_call_chain\n\nThe same problem could have happened with the trace_probe_ops,\nbut they are modified with the set_frace_filter file which does the\nupdate at closure of the file.\n\nThe simple solution is to change ENABLE to UPDATE and call it every\ntime an ftrace_ops is unregistered.\n\nLink: http://lkml.kernel.org/r/1323105776-26961-3-git-send-email-jolsa@redhat.com\n\nCc: stable@vger.kernel.org # 3.0+\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "efc96737bd82b508794d2b28061a12af4a3f7766",
      "tree": "e9fe4982967b74c0d25a35a2d7f7c62d8be98a47",
      "parents": [
        "1ec454baf1245df4fdb5dae728da3363630ce6de",
        "7e9a49ef542610609144d1afcd516dc3fafac4d6"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Nov 11 08:19:37 2011 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Nov 11 08:19:37 2011 +0100"
      },
      "message": "Merge branch \u0027tip/perf/core\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace into perf/core\n"
    },
    {
      "commit": "d4d34b981a5327eec956c6cb4cce397ce6f57279",
      "tree": "a5ee3ca4103b2a987f369a15cd9f28798d0d91cf",
      "parents": [
        "49908a1b25d448d68fd26faca260e1850201575f"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 04 20:32:39 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Nov 07 13:48:05 2011 -0500"
      },
      "message": "ftrace: Fix hash record accounting bug\n\nIf the set_ftrace_filter is cleared by writing just whitespace to\nit, then the filter hash refcounts will be decremented but not\nupdated. This causes two bugs:\n\n1) No functions will be enabled for tracing when they all should be\n\n2) If the users clears the set_ftrace_filter twice, it will crash ftrace:\n\n------------[ cut here ]------------\nWARNING: at /home/rostedt/work/git/linux-trace.git/kernel/trace/ftrace.c:1384 __ftrace_hash_rec_update.part.27+0x157/0x1a7()\nModules linked in:\nPid: 2330, comm: bash Not tainted 3.1.0-test+ #32\nCall Trace:\n [\u003cffffffff81051828\u003e] warn_slowpath_common+0x83/0x9b\n [\u003cffffffff8105185a\u003e] warn_slowpath_null+0x1a/0x1c\n [\u003cffffffff810ba362\u003e] __ftrace_hash_rec_update.part.27+0x157/0x1a7\n [\u003cffffffff810ba6e8\u003e] ? ftrace_regex_release+0xa7/0x10f\n [\u003cffffffff8111bdfe\u003e] ? kfree+0xe5/0x115\n [\u003cffffffff810ba51e\u003e] ftrace_hash_move+0x2e/0x151\n [\u003cffffffff810ba6fb\u003e] ftrace_regex_release+0xba/0x10f\n [\u003cffffffff8112e49a\u003e] fput+0xfd/0x1c2\n [\u003cffffffff8112b54c\u003e] filp_close+0x6d/0x78\n [\u003cffffffff8113a92d\u003e] sys_dup3+0x197/0x1c1\n [\u003cffffffff8113a9a6\u003e] sys_dup2+0x4f/0x54\n [\u003cffffffff8150cac2\u003e] system_call_fastpath+0x16/0x1b\n---[ end trace 77a3a7ee73794a02 ]---\n\nLink: http://lkml.kernel.org/r/20111101141420.GA4918@debian\n\nReported-by: Rabin Vincent \u003crabin@rab.in\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "8ee3c92b7f2751c392be2d8fc360a410480b8757",
      "tree": "60ebbd1d3dc66eda28f73cc08d19c0ccbd082cbf",
      "parents": [
        "e5e78d08f3ab3094783b8df08a5b6d1d1a56a58f"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Nov 04 10:45:23 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Nov 07 11:02:33 2011 -0500"
      },
      "message": "ftrace: Remove force undef config value left for testing\n\nA forced undef of a config value was used for testing and was\naccidently left in during the final commit. This causes x86 to\nrun slower than needed while running function tracing as well\nas causes the function graph selftest to fail when DYNMAIC_FTRACE\nis not set. This is because the code in MCOUNT expects the ftrace\ncode to be processed with the config value set that happened to\nbe forced not set.\n\nThe forced config option was left in by:\n    commit 6331c28c962561aee59e5a493b7556a4bb585957\n    ftrace: Fix dynamic selftest failure on some archs\n\nLink: http://lkml.kernel.org/r/20111102150255.GA6973@debian\n\nCc: stable@vger.kernel.org\nReported-by: Rabin Vincent \u003crabin@rab.in\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "56d82e000cdfb51aa92241d4682302f78c35cd92",
      "tree": "db011bf38930f2d0d0fa8a8f43e223fd03e25fad",
      "parents": [
        "9984de1a5a8a96275fcab818f7419af5a3c86e71"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Thu May 26 17:53:52 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Add \u003clinux/module.h\u003e to files using it implicitly\n\nThese files are doing things like module_put and try_module_get\nso they need to call out the module.h for explicit inclusion,\nrather than getting it via \u003clinux/device.h\u003e which we ideally want\nto remove the module.h inclusion from.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "e0a413f619ef8bc366dafc6f8221674993b8d85f",
      "tree": "a6696b0e7ef5422490bdbcc28d385c031d3e4eb8",
      "parents": [
        "e36de1de4a5f95b7cb3e5c37d10e6bbb91833ef0"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Sep 29 21:26:16 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Oct 11 09:13:25 2011 -0400"
      },
      "message": "tracing: Warn on output if the function tracer was found corrupted\n\nAs the function tracer is very intrusive, lots of self checks are\nperformed on the tracer and if something is found to be strange\nit will shut itself down keeping it from corrupting the rest of the\nkernel. This shutdown may still allow functions to be traced, as the\ntracing only stops new modifications from happening. Trying to stop\nthe function tracer itself can cause more harm as it requires code\nmodification.\n\nAlthough a WARN_ON() is executed, a user may not notice it. To help\nthe user see that something isn\u0027t right with the tracing of the system\na big warning is added to the output of the tracer that lets the user\nknow that their data may be incomplete.\n\nReported-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "40bcea7bbe8fe452a2d272e2ffd3dea281eec9ff",
      "tree": "aedb6d02e53e3cf84cc32fd81db84032cee205e1",
      "parents": [
        "492f73a303b488ffd67097b2351d54aa6e6c7c73",
        "14a8fd7ceea6915c613746203d6e9a2bf273f16c"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Jul 21 09:32:40 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Jul 21 09:32:40 2011 +0200"
      },
      "message": "Merge branch \u0027tip/perf/core\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core\n"
    },
    {
      "commit": "492f73a303b488ffd67097b2351d54aa6e6c7c73",
      "tree": "6e6c16fbd628bb5eb577cfc70a488ca286563e58",
      "parents": [
        "e08fbb78f03fe2c4f88824faf6f51ce6af185e11",
        "f7bc8b61f65726ff98f52e286b28e294499d7a08"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Jul 21 09:29:14 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Jul 21 09:29:21 2011 +0200"
      },
      "message": "Merge branch \u0027perf/urgent\u0027 into perf/core\n\nMerge reason: pick up the latest fixes - they won\u0027t make v3.0.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f7bc8b61f65726ff98f52e286b28e294499d7a08",
      "tree": "88ef0c943d27aa9f69824d87faa990731cc2ebfe",
      "parents": [
        "04da85b86188f224cc9b391b5bdd92a3ba20ffcf"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Jul 14 23:02:27 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 14 23:02:27 2011 -0400"
      },
      "message": "ftrace: Fix regression where ftrace breaks when modules are loaded\n\nEnabling function tracer to trace all functions, then load a module and\nthen disable function tracing will cause ftrace to fail.\n\nThis can also happen by enabling function tracing on the command line:\n\n  ftrace\u003dfunction\n\nand during boot up, modules are loaded, then you disable function tracing\nwith \u0027echo nop \u003e current_tracer\u0027 you will trigger a bug in ftrace that\nwill shut itself down.\n\nThe reason is, the new ftrace code keeps ref counts of all ftrace_ops that\nare registered for tracing. When one or more ftrace_ops are registered,\nall the records that represent the functions that the ftrace_ops will\ntrace have a ref count incremented. If this ref count is not zero,\nwhen the code modification runs, that function will be enabled for tracing.\nIf the ref count is zero, that function will be disabled from tracing.\n\nTo make sure the accounting was working, FTRACE_WARN_ON()s were added\nto updating of the ref counts.\n\nIf the ref count hits its max (\u003e 2^30 ftrace_ops added), or if\nthe ref count goes below zero, a FTRACE_WARN_ON() is triggered which\ndisables all modification of code.\n\nSince it is common for ftrace_ops to trace all functions in the kernel,\ninstead of creating \u003e 20,000 hash items for the ftrace_ops, the hash\ncount is just set to zero, and it represents that the ftrace_ops is\nto trace all functions. This is where the issues arrise.\n\nIf you enable function tracing to trace all functions, and then add\na module, the modules function records do not get the ref count updated.\nWhen the function tracer is disabled, all function records ref counts\nare subtracted. Since the modules never had their ref counts incremented,\nthey go below zero and the FTRACE_WARN_ON() is triggered.\n\nThe solution to this is rather simple. When modules are loaded, and\ntheir functions are added to the the ftrace pool, look to see if any\nftrace_ops are registered that trace all functions. And for those,\nupdate the ref count for the module function records.\n\nReported-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "6331c28c962561aee59e5a493b7556a4bb585957",
      "tree": "33292a3127aa831ee8ec2394e790bc2a8817beee",
      "parents": [
        "072126f4529196f71a97960248bca54fd4554c2d"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Jul 13 15:11:02 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Jul 13 22:25:09 2011 -0400"
      },
      "message": "ftrace: Fix dynamic selftest failure on some archs\n\nArchs that do not implement CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST, will\nfail the dynamic ftrace selftest.\n\nThe function tracer has a quick \u0027off\u0027 variable that will prevent\nthe call back functions from being called. This variable is called\nfunction_trace_stop. In x86, this is implemented directly in the mcount\nassembly, but for other archs, an intermediate function is used called\nftrace_test_stop_func().\n\nIn dynamic ftrace, the function pointer variable ftrace_trace_function is\nused to update the caller code in the mcount caller. But for archs that\ndo not have CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST set, it only calls\nftrace_test_stop_func() instead, which in turn calls __ftrace_trace_function.\n\nWhen more than one ftrace_ops is registered, the function it calls is\nftrace_ops_list_func(), which will iterate over all registered ftrace_ops\nand call the callbacks that have their hash matching.\n\nThe issue happens when two ftrace_ops are registered for different functions\nand one is then unregistered. The __ftrace_trace_function is then pointed\nto the remaining ftrace_ops callback function directly. This mean it will\nbe called for all functions that were registered to trace by both ftrace_ops\nthat were registered.\n\nThis is not an issue for archs with CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST,\nbecause the update of ftrace_trace_function doesn\u0027t happen until after all\nfunctions have been updated, and then the mcount caller is updated. But\nfor those archs that do use the ftrace_test_stop_func(), the update is\nimmediate.\n\nThe dynamic selftest fails because it hits this situation, and the\nftrace_ops that it registers fails to only trace what it was suppose to\nand instead traces all other functions.\n\nThe solution is to delay the setting of __ftrace_trace_function until\nafter all the functions have been updated according to the registered\nftrace_ops. Also, function_trace_stop is set during the update to prevent\nfunction tracing from calling code that is caused by the function tracer\nitself.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "072126f4529196f71a97960248bca54fd4554c2d",
      "tree": "cb1275288f49b59e4643abb85855ad6889aba94f",
      "parents": [
        "41fb61c2d08107ce96a5dcb3a6289b2afd3e135c"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Jul 13 15:08:31 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Jul 13 22:10:05 2011 -0400"
      },
      "message": "ftrace: Update filter when tracing enabled in set_ftrace_filter()\n\nCurrently, if set_ftrace_filter() is called when the ftrace_ops is\nactive, the function filters will not be updated. They will only be updated\nwhen tracing is disabled and re-enabled.\n\nUpdate the functions immediately during set_ftrace_filter().\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "41fb61c2d08107ce96a5dcb3a6289b2afd3e135c",
      "tree": "ca3ae1796ca1d3f01f2bb62eba1fbc93db1affae",
      "parents": [
        "4376cac66778b25e599be3f5d54f33f58ba8ead7"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Jul 13 15:03:44 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed Jul 13 22:00:50 2011 -0400"
      },
      "message": "ftrace: Balance records when updating the hash\n\nWhenever the hash of the ftrace_ops is updated, the record counts\nmust be balance. This requires disabling the records that are set\nin the original hash, and then enabling the records that are set\nin the updated hash.\n\nMoving the update into ftrace_hash_move() removes the bug where the\nhash was updated but the records were not, which results in ftrace\ntriggering a warning and disabling itself because the ftrace_ops filter\nis updated while the ftrace_ops was registered, and then the failure\nhappens when the ftrace_ops is unregistered.\n\nThe current code will not trigger this bug, but new code will.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "4376cac66778b25e599be3f5d54f33f58ba8ead7",
      "tree": "9cf05820586f140bafcde67cd2cd80a4391ef7eb",
      "parents": [
        "e4a3f541f0b67fdad98b326c851dfe7f4b6b6dad"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Jun 24 23:28:13 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 07 22:39:38 2011 -0400"
      },
      "message": "ftrace: Do not disable interrupts for modules in mcount update\n\nWhen I mounted an NFS directory, it caused several modules to be loaded. At the\ntime I was running the preemptirqsoff tracer, and it showed the following\noutput:\n\n# tracer: preemptirqsoff\n#\n# preemptirqsoff latency trace v1.1.5 on 2.6.33.9-rt30-mrg-test\n# --------------------------------------------------------------------\n# latency: 1177 us, #4/4, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)\n#    -----------------\n#    | task: modprobe-19370 (uid:0 nice:0 policy:0 rt_prio:0)\n#    -----------------\n#  \u003d\u003e started at: ftrace_module_notify\n#  \u003d\u003e ended at:   ftrace_module_notify\n#\n#\n#                  _------\u003d\u003e CPU#\n#                 / _-----\u003d\u003e irqs-off\n#                | / _----\u003d\u003e need-resched\n#                || / _---\u003d\u003e hardirq/softirq\n#                ||| / _--\u003d\u003e preempt-depth\n#                |||| /_--\u003d\u003e lock-depth\n#                |||||/     delay\n#  cmd     pid   |||||| time  |   caller\n#     \\   /      ||||||   \\   |   /\nmodprobe-19370   3d....    0us!: ftrace_process_locs \u003c-ftrace_module_notify\nmodprobe-19370   3d.... 1176us : ftrace_process_locs \u003c-ftrace_module_notify\nmodprobe-19370   3d.... 1178us : trace_hardirqs_on \u003c-ftrace_module_notify\nmodprobe-19370   3d.... 1178us : \u003cstack trace\u003e\n \u003d\u003e ftrace_process_locs\n \u003d\u003e ftrace_module_notify\n \u003d\u003e notifier_call_chain\n \u003d\u003e __blocking_notifier_call_chain\n \u003d\u003e blocking_notifier_call_chain\n \u003d\u003e sys_init_module\n \u003d\u003e system_call_fastpath\n\nThat\u0027s over 1ms that interrupts are disabled on a Real-Time kernel!\n\nLooking at the cause (being the ftrace author helped), I found that the\ninterrupts are disabled before the code modification of mcounts into nops. The\ninterrupts only need to be disabled on start up around this code, not when\nmodules are being loaded.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "43dd61c9a09bd413e837df829e6bfb42159be52a",
      "tree": "613b8ceaf798c87a4fac4ff66dc2ac0e13c3e46b",
      "parents": [
        "40ee4dffff061399eb9358e0c8fcfbaf8de4c8fe"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Jul 07 11:09:22 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jul 07 11:30:08 2011 -0400"
      },
      "message": "ftrace: Fix regression of :mod:module function enabling\n\nThe new code that allows different utilities to pick and choose\nwhat functions they trace broke the :mod: hook that allows users\nto trace only functions of a particular module.\n\nThe reason is that the :mod: hook bypasses the hash that is setup\nto allow individual users to trace their own functions and uses\nthe global hash directly. But if the global hash has not been\nset up, it will cause a bug:\n\necho \u0027*:mod:radeon\u0027 \u003e /sys/kernel/debug/set_ftrace_filter\n\nproduces:\n\n [drm:drm_mode_getfb] *ERROR* invalid framebuffer id\n [drm:radeon_crtc_page_flip] *ERROR* failed to reserve new rbo buffer before flip\n BUG: unable to handle kernel paging request at ffffffff8160ec90\n IP: [\u003cffffffff810d9136\u003e] add_hash_entry+0x66/0xd0\n PGD 1a05067 PUD 1a09063 PMD 80000000016001e1\n Oops: 0003 [#1] SMP Jul  7 04:02:28 phyllis kernel: [55303.858604] CPU 1\n Modules linked in: cryptd aes_x86_64 aes_generic binfmt_misc rfcomm bnep ip6table_filter hid radeon r8169 ahci libahci mii ttm drm_kms_helper drm video i2c_algo_bit intel_agp intel_gtt\n\n Pid: 10344, comm: bash Tainted: G        WC  3.0.0-rc5 #1 Dell Inc. Inspiron N5010/0YXXJJ\n RIP: 0010:[\u003cffffffff810d9136\u003e]  [\u003cffffffff810d9136\u003e] add_hash_entry+0x66/0xd0\n RSP: 0018:ffff88003a96bda8  EFLAGS: 00010246\n RAX: ffff8801301735c0 RBX: ffffffff8160ec80 RCX: 0000000000306ee0\n RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff880137c92940\n RBP: ffff88003a96bdb8 R08: ffff880137c95680 R09: 0000000000000000\n R10: 0000000000000001 R11: 0000000000000000 R12: ffffffff81c9df78\n R13: ffff8801153d1000 R14: 0000000000000000 R15: 0000000000000000\n FS: 00007f329c18a700(0000) GS:ffff880137c80000(0000) knlGS:0000000000000000\n CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033\n CR2: ffffffff8160ec90 CR3: 000000003002b000 CR4: 00000000000006e0\n DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n Process bash (pid: 10344, threadinfo ffff88003a96a000, task ffff88012fcfc470)\n Stack:\n  0000000000000fd0 00000000000000fc ffff88003a96be38 ffffffff810d92f5\n  ffff88011c4c4e00 ffff880000000000 000000000b69f4d0 ffffffff8160ec80\n  ffff8800300e6f06 0000000081130295 0000000000000282 ffff8800300e6f00\n Call Trace:\n  [\u003cffffffff810d92f5\u003e] match_records+0x155/0x1b0\n  [\u003cffffffff810d940c\u003e] ftrace_mod_callback+0xbc/0x100\n  [\u003cffffffff810dafdf\u003e] ftrace_regex_write+0x16f/0x210\n  [\u003cffffffff810db09f\u003e] ftrace_filter_write+0xf/0x20\n  [\u003cffffffff81166e48\u003e] vfs_write+0xc8/0x190\n  [\u003cffffffff81167001\u003e] sys_write+0x51/0x90\n  [\u003cffffffff815c7e02\u003e] system_call_fastpath+0x16/0x1b\n Code: 48 8b 33 31 d2 48 85 f6 75 33 49 89 d4 4c 03 63 08 49 8b 14 24 48 85 d2 48 89 10 74 04 48 89 42 08 49 89 04 24 4c 89 60 08 31 d2\n RIP [\u003cffffffff810d9136\u003e] add_hash_entry+0x66/0xd0\n  RSP \u003cffff88003a96bda8\u003e\n CR2: ffffffff8160ec90\n ---[ end trace a5d031828efdd88e ]---\n\nReported-by: Brian Marete \u003cmarete@toshnix.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "931da6137e8e8c622f59251e8b645467aea293f1",
      "tree": "2169cbd29d5d9a4cbc7104b2a744a95ba746c50d",
      "parents": [
        "5d67be97f8903d05ce53597fb5f3bc25a45e8026",
        "1fd8df2c3970c9e7e4e262354154ee39e58bdd7c"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jul 05 11:55:43 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jul 05 11:55:43 2011 +0200"
      },
      "message": "Merge branch \u0027tip/perf/core-2\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core\n"
    },
    {
      "commit": "22fe9b54d859e53bfbbbdc1a0a77a82bc453927c",
      "tree": "4aec2d069decbe0786ad5474908f5bbe49732ad4",
      "parents": [
        "749230b06a753a22f6ed96e5dd60815d6ab12865"
      ],
      "author": {
        "name": "Peter Huewe",
        "email": "peterhuewe@gmx.de",
        "time": "Tue Jun 07 21:58:27 2011 +0200"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 14 22:48:50 2011 -0400"
      },
      "message": "tracing: Convert to kstrtoul_from_user\n\nThis patch replaces the code for getting an unsigned long from a\nuserspace buffer by a simple call to kstroul_from_user.\nThis makes it easier to read and less error prone.\n\nSigned-off-by: Peter Huewe \u003cpeterhuewe@gmx.de\u003e\nLink: http://lkml.kernel.org/r/1307476707-14762-1-git-send-email-peterhuewe@gmx.de\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "bd38c0e6f98326132a691d73b2056b426423c638",
      "tree": "4e7f9a0efcfdb23e564db51da275fd9234ffa84f",
      "parents": [
        "cf30cf67d6c7592c670ec946d89fc15ee0deb0eb"
      ],
      "author": {
        "name": "Paul McQuade",
        "email": "tungstentide@gmail.com",
        "time": "Tue May 31 20:51:55 2011 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 14 22:48:45 2011 -0400"
      },
      "message": "ftrace: Fixed an include coding style issue\n\nRemoved \u003casm/ftrace.h\u003e because \u003clinux/ftrace.h\u003e was already declared.\nBraces of struct\u0027s coding style fixed.\n\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Paul McQuade \u003ctungstentide@gmail.com\u003e\nLink: http://lkml.kernel.org/r/4DE59711.3090900@gmail.com\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a4f18ed11a4ddf327dd91cd19e237278600ad327",
      "tree": "bbe96241c6db2be16e881920a3312ec937ed7cd1",
      "parents": [
        "265a5b7ee3eb21a4d0e53e17d59ba6eada91af39"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Jun 07 09:26:46 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Jun 07 14:49:19 2011 -0400"
      },
      "message": "ftrace: Revert 8ab2b7efd ftrace: Remove unnecessary disabling of irqs\n\nRevert the commit that removed the disabling of interrupts around\nthe initial modifying of mcount callers to nops, and update the comment.\n\nThe original comment was outdated and stated that the interrupts were\nbeing disabled to prevent kstop machine, which was required with the\nold ftrace daemon, but was no longer the case.\n\nWhat the comment failed to mention was that interrupts needed to be\ndisabled to keep interrupts from preempting the modifying of the code\nand then executing the code that was partially modified.\n\nRevert the commit and update the comment.\n\nReported-by: Richard W.M. Jones \u003crjones@redhat.com\u003e\nTested-by: Richard W.M. Jones \u003crjones@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "0aff1c0cef13b34c17e81a502336fad738151c37",
      "tree": "3bf383429c3d948bd34ff71ae78d82bb2439fab5",
      "parents": [
        "d7ebe75b065a7c2d58ffc12f9d2e00d5ea4e71eb"
      ],
      "author": {
        "name": "GuoWen Li",
        "email": "guowen.li.linux@gmail.com",
        "time": "Wed Jun 01 19:18:47 2011 +0800"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Jun 06 22:34:25 2011 -0400"
      },
      "message": "ftrace: Fix possible undefined return code\n\nkernel/trace/ftrace.c: In function \u0027ftrace_regex_write.clone.15\u0027:\nkernel/trace/ftrace.c:2743:6: warning: \u0027ret\u0027 may be used uninitialized in this\nfunction\n\nSigned-off-by: GuoWen Li \u003cguowen.li.linux@gmail.com\u003e\nLink: http://lkml.kernel.org/r/201106011918.47939.guowen.li.linux@gmail.com\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "b1cff0ad1062621ae63cb6c5dc4165191fe2e9f1",
      "tree": "81c35a8fe57b1a139416aac637b0fc198f67199d",
      "parents": [
        "7f34b746f79c1e1f8fd6d09799d133263ae7a504"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 25 14:27:43 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 25 22:13:49 2011 -0400"
      },
      "message": "ftrace: Add internal recursive checks\n\nWitold reported a reboot caused by the selftests of the dynamic function\ntracer. He sent me a config and I used ktest to do a config_bisect on it\n(as my config did not cause the crash). It pointed out that the problem\nconfig was CONFIG_PROVE_RCU.\n\nWhat happened was that if multiple callbacks are attached to the\nfunction tracer, we iterate a list of callbacks. Because the list is\nmanaged by synchronize_sched() and preempt_disable, the access to the\npointers uses rcu_dereference_raw().\n\nWhen PROVE_RCU is enabled, the rcu_dereference_raw() calls some\ndebugging functions, which happen to be traced. The tracing of the debug\nfunction would then call rcu_dereference_raw() which would then call the\ndebug function and then... well you get the idea.\n\nI first wrote two different patches to solve this bug.\n\n1) add a __rcu_dereference_raw() that would not do any checks.\n2) add notrace to the offending debug functions.\n\nBoth of these patches worked.\n\nTalking with Paul McKenney on IRC, he suggested to add recursion\ndetection instead. This seemed to be a better solution, so I decided to\nimplement it. As the task_struct already has a trace_recursion to detect\nrecursion in the ring buffer, and that has a very small number it\nallows, I decided to use that same variable to add flags that can detect\nthe recursion inside the infrastructure of the function tracer.\n\nI plan to change it so that the task struct bit can be checked in\nmcount, but as that requires changes to all archs, I will hold that off\nto the next merge window.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nLink: http://lkml.kernel.org/r/1306348063.1465.116.camel@gandalf.stny.rr.com\nReported-by: Witold Baryluk \u003cbaryluk@smp.if.uj.edu.pl\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "3b6cfdb1714a33ae4d2ca9fbc818a42cf7adee69",
      "tree": "1fc1ca6ff17da6c7ab30d2dffa99d3cb6d4cfca4",
      "parents": [
        "17bb615ad4f8d2d2c0f02794d27d7f83e0009ef4"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon May 23 15:33:49 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 25 22:13:42 2011 -0400"
      },
      "message": "ftrace: Set ops-\u003eflag to enabled even on static function tracing\n\nWhen dynamic ftrace is not configured, the ops-\u003eflags still needs\nto have its FTRACE_OPS_FL_ENABLED bit set in ftrace_startup().\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "a1cd6173596c6f7d1f0b41ac7d33ecf03c581edc",
      "tree": "413ed775a2c48d8ad003740fa6ef0d912f784842",
      "parents": [
        "7cbc5b8d4a775a43875a09e29c49a2a8195b5b2d"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon May 23 15:24:25 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 25 22:13:37 2011 -0400"
      },
      "message": "ftrace: Have ftrace_startup() return failure code\n\nThe register_ftrace_function() returns an error code on failure\nexcept if the call to ftrace_startup() fails. Add a error return to\nftrace_startup() if it fails to start, allowing register_ftrace_funtion()\nto return a proper error value.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "936e074b286ae779f134312178dbab139ee7ea52",
      "tree": "6b0497be4d5e6258ad9b1ec99b2a9feb25b2dd22",
      "parents": [
        "cdbe61bfe70440939e457fb4a8d0995eaaed17de"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu May 05 22:54:01 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 19:22:52 2011 -0400"
      },
      "message": "ftrace: Modify ftrace_set_filter/notrace to take ops\n\nSince users of the function tracer can now pick and choose which\nfunctions they want to trace agnostically from other users of the\nfunction tracer, we need to pass the ops struct to the ftrace_set_filter()\nfunctions.\n\nThe functions ftrace_set_global_filter() and ftrace_set_global_notrace()\nis added to keep the old filter functions which are used to modify\nthe generic function tracers.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "cdbe61bfe70440939e457fb4a8d0995eaaed17de",
      "tree": "6e82066db25ab6fa42455a42bb77783dac5260b8",
      "parents": [
        "b848914ce39589d89ee0078a6d1ef452b464729e"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu May 05 21:14:55 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:51 2011 -0400"
      },
      "message": "ftrace: Allow dynamically allocated function tracers\n\nNow that functions may be selected individually, it only makes sense\nthat we should allow dynamically allocated trace structures to\nbe traced. This will allow perf to allocate a ftrace_ops structure\nat runtime and use it to pick and choose which functions that\nstructure will trace.\n\nNote, a dynamically allocated ftrace_ops will always be called\nindirectly instead of being called directly from the mcount in\nentry.S. This is because there\u0027s no safe way to prevent mcount\nfrom being preempted before calling the function, unless we\nmodify every entry.S to do so (not likely). Thus, dynamically allocated\nfunctions will now be called by the ftrace_ops_list_func() that\nloops through the ops that are allocated if there are more than\none op allocated at a time. This loop is protected with a\npreempt_disable.\n\nTo determine if an ftrace_ops structure is allocated or not, a new\nutil function was added to the kernel/extable.c called\ncore_kernel_data(), which returns 1 if the address is between\n_sdata and _edata.\n\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "b848914ce39589d89ee0078a6d1ef452b464729e",
      "tree": "542bf09ae3c2d9118833132621585fb458e2a003",
      "parents": [
        "07fd5515f3b5c20704707f63e7f4485b534508a8"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed May 04 09:27:52 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:50 2011 -0400"
      },
      "message": "ftrace: Implement separate user function filtering\n\nftrace_ops that are registered to trace functions can now be\nagnostic to each other in respect to what functions they trace.\nEach ops has their own hash of the functions they want to trace\nand a hash to what they do not want to trace. A empty hash for\nthe functions they want to trace denotes all functions should\nbe traced that are not in the notrace hash.\n\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "07fd5515f3b5c20704707f63e7f4485b534508a8",
      "tree": "f018ec497f8c6b49a0fcfcd7a92a600e670f90f2",
      "parents": [
        "2b499381bc50ede01b3d8eab164ca2fad00655f0"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu May 05 18:03:47 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:50 2011 -0400"
      },
      "message": "ftrace: Free hash with call_rcu_sched()\n\nWhen a hash is modified and might be in use, we need to perform\na schedule RCU operation on it, as the hashes will soon be used\ndirectly in the function tracer callback.\n\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "2b499381bc50ede01b3d8eab164ca2fad00655f0",
      "tree": "3140c277582b03b1645fffcb829763d62e2f01fa",
      "parents": [
        "bd69c30b1d08032d97ab0dabd7a1eb7fb73ca2b2"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue May 03 22:49:52 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:49 2011 -0400"
      },
      "message": "ftrace: Have global_ops store the functions that are to be traced\n\nThis is a step towards each ops structure defining its own set\nof functions to trace. As the current code with pid\u0027s and such\nare specific to the global_ops, it is restructured to be used\nwith the global ops.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "bd69c30b1d08032d97ab0dabd7a1eb7fb73ca2b2",
      "tree": "e8bd00dc87de4f10f049e0c41fd09f630b96585d",
      "parents": [
        "647bcd03d5b2fb44fd9c9ef1a4f50c2eee8f779a"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue May 03 21:55:54 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:48 2011 -0400"
      },
      "message": "ftrace: Add ops parameter to ftrace_startup/shutdown functions\n\nIn order to allow different ops to enable different functions,\nthe ftrace_startup() and ftrace_shutdown() functions need the\nops parameter passed to them.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "647bcd03d5b2fb44fd9c9ef1a4f50c2eee8f779a",
      "tree": "32946158175458f16ae95c383ca7985162eefe09",
      "parents": [
        "ed926f9b35cda0988234c356e16a7cb30f4e5338"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue May 03 14:39:21 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:47 2011 -0400"
      },
      "message": "ftrace: Add enabled_functions file\n\nAdd the enabled_functions file that is used to show all the\nfunctions that have been enabled for tracing as well as their\nref counts. This helps seeing if any function has been registered\nand what functions are being traced.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ed926f9b35cda0988234c356e16a7cb30f4e5338",
      "tree": "32169b7aaf6b0ef7815b095a544cce93e884bb73",
      "parents": [
        "33dc9b1267d59cef46ff0bd6bc043190845dc919"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue May 03 13:25:24 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:47 2011 -0400"
      },
      "message": "ftrace: Use counters to enable functions to trace\n\nEvery function has its own record that stores the instruction\npointer and flags for the function to be traced. There are only\ntwo flags: enabled and free. The enabled flag states that tracing\nfor the function has been enabled (actively traced), and the free\nflag states that the record no longer points to a function and can\nbe used by new functions (loaded modules).\n\nThese flags are now moved to the MSB of the flags (actually just\nthe top 32bits). The rest of the bits (30 bits) are now used as\na ref counter. Everytime a tracer register functions to trace,\nthose functions will have its counter incremented.\n\nWhen tracing is enabled, to determine if a function should be traced,\nthe counter is examined, and if it is non-zero it is set to trace.\n\nWhen a ftrace_ops is registered to trace functions, its hashes\nare examined. If the ftrace_ops filter_hash count is zero, then\nall functions are set to be traced, otherwise only the functions\nin the hash are to be traced. The exception to this is if a function\nis also in the ftrace_ops notrace_hash. Then that function\u0027s counter\nis not incremented for this ftrace_ops.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "33dc9b1267d59cef46ff0bd6bc043190845dc919",
      "tree": "d5a3f78a6aabcd33b9848d3bf86b9b53ff6ea2e0",
      "parents": [
        "f45948e898e7bc76a73a468796d2ce80dd040058"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon May 02 17:34:47 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:46 2011 -0400"
      },
      "message": "ftrace: Separate hash allocation and assignment\n\nWhen filtering, allocate a hash to insert the function records.\nAfter the filtering is complete, assign it to the ftrace_ops structure.\n\nThis allows the ftrace_ops structure to have a much smaller array of\nhash buckets instead of wasting a lot of memory.\n\nA read only empty_hash is created to be the minimum size that any ftrace_ops\ncan point to.\n\nWhen a new hash is created, it has the following steps:\n\no Allocate a default hash.\no Walk the function records assigning the filtered records to the hash\no Allocate a new hash with the appropriate size buckets\no Move the entries from the default hash to the new hash.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "f45948e898e7bc76a73a468796d2ce80dd040058",
      "tree": "483979d8030cc2cf156ed65218c03a2d6825d9f5",
      "parents": [
        "1cf41dd79993389b012e4542ab502ce36ae7343f"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon May 02 12:29:25 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:45 2011 -0400"
      },
      "message": "ftrace: Create a global_ops to hold the filter and notrace hashes\n\nCombine the filter and notrace hashes to be accessed by a single entity,\nthe global_ops. The global_ops is a ftrace_ops structure that is passed\nto different functions that can read or modify the filtering of the\nfunction tracer.\n\nThe ftrace_ops structure was modified to hold a filter and notrace\nhashes so that later patches may allow each ftrace_ops to have its own\nset of rules to what functions may be filtered.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "1cf41dd79993389b012e4542ab502ce36ae7343f",
      "tree": "e1d0b58b2256d5936cff0c9d29ca8f68a80cedd8",
      "parents": [
        "b448c4e3ae6d20108dba1d7833f2c0d3dbad87ce"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 29 20:59:51 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:44 2011 -0400"
      },
      "message": "ftrace: Use hash instead for FTRACE_FL_FILTER\n\nWhen multiple users are allowed to have their own set of functions\nto trace, having the FTRACE_FL_FILTER flag will not be enough to\nhandle the accounting of those users. Each user will need their own\nset of functions.\n\nReplace the FTRACE_FL_FILTER with a filter_hash instead. This is\ntemporary until the rest of the function filtering accounting\ngets in.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "b448c4e3ae6d20108dba1d7833f2c0d3dbad87ce",
      "tree": "504e5a3640328458e652e41cfd2ed74e4652e5b3",
      "parents": [
        "94692349c4fc1bc74c19a28f9379509361a06a3b"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 29 15:12:32 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Wed May 18 15:29:44 2011 -0400"
      },
      "message": "ftrace: Replace FTRACE_FL_NOTRACE flag with a hash of ignored functions\n\nTo prepare for the accounting system that will allow multiple users of\nthe function tracer, having the FTRACE_FL_NOTRACE as a flag in the\ndyn_trace record does not make sense.\n\nAll ftrace_ops will soon have a hash of functions they should trace\nand not trace. By making a global hash of functions not to trace makes\nthis easier for the transition.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "ac0a3260f37b8616da8d33488ec94b94e6ae5b31",
      "tree": "0db61f7492d45f1d548b0bcef06a0df9c904442c",
      "parents": [
        "809435ff4f43a5c0cb0201b3b89176253d5ade18",
        "b9df92d2a94eef8811061aecb1396290df440e2e"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun May 01 19:11:42 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun May 01 19:11:42 2011 +0200"
      },
      "message": "Merge branch \u0027tip/perf/core\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core\n"
    },
    {
      "commit": "b9df92d2a94eef8811061aecb1396290df440e2e",
      "tree": "313ad90dd3cd726af8da4d7768c912f96b3daa9a",
      "parents": [
        "491d0dcfb9707e1f83eff93ca503eb7573162ef2"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Apr 28 20:32:08 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:53:14 2011 -0400"
      },
      "message": "ftrace: Consolidate the function match routines for normal and mods\n\nThe code used for matching functions is almost identical between normal\nselecting of functions and using the :mod: feature of set_ftrace_notrace.\n\nConsolidate the two users into one function.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "491d0dcfb9707e1f83eff93ca503eb7573162ef2",
      "tree": "ab156f8c4bc8ebfcc7429533a34726226a11bbba",
      "parents": [
        "996e87be7f537fb34638875dd37083166c733425"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Apr 27 21:43:36 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:53:11 2011 -0400"
      },
      "message": "ftrace: Consolidate updating of ftrace_trace_function\n\nThere are three locations that perform almost identical functions in order\nto update the ftrace_trace_function (the ftrace function variable that gets\ncalled by mcount).\n\nConsolidate these into a single function called update_ftrace_function().\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "996e87be7f537fb34638875dd37083166c733425",
      "tree": "0d961a4870b39450470b117cde45c3c2c1931959",
      "parents": [
        "d2c8c3eafbf715306ec891e7ca52d3d999acbe31"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Apr 26 16:11:03 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:53:08 2011 -0400"
      },
      "message": "ftrace: Move record update for normal and modules into a separate function\n\nThe updating of a function record is moved to a single function. This will allow\nus to add specific changes in one location for both modules and kernel\nfunctions.\n\nLater patches will determine if the function record itself needs to be updated\n(which enables the mcount caller), or just the ftrace_ops needs the update.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "d2c8c3eafbf715306ec891e7ca52d3d999acbe31",
      "tree": "1dd5b7ae74f1dd951b542df3eb455af445a349c1",
      "parents": [
        "45a4a2372b364107cabea79f255b333236626416"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Mon Apr 25 14:32:42 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:53:04 2011 -0400"
      },
      "message": "ftrace: Remove FTRACE_FL_CONVERTED flag\n\nSince we disable all function tracer processing if we detect\nthat a modification of a instruction had failed, we do not need\nto track that the record has failed. No more ftrace processing\nis allowed, and the FTRACE_FL_CONVERTED flag is pointless.\n\nThe FTRACE_FL_CONVERTED flag was used to denote records that were\nsuccessfully converted from mcount calls into nops. But if a single\nrecord fails, all of ftrace is disabled.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "45a4a2372b364107cabea79f255b333236626416",
      "tree": "dfe3e1c3b55451fedc8896aaa8359677d583a0e5",
      "parents": [
        "3499e461147636bf55c41128d83b679ac6ab2d86"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Apr 21 23:16:46 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:53:01 2011 -0400"
      },
      "message": "ftrace: Remove FTRACE_FL_FAILED flag\n\nSince we disable all function tracer processing if we detect\nthat a modification of a instruction had failed, we do not need\nto track that the record has failed. No more ftrace processing\nis allowed, and the FTRACE_FL_FAILED flag is pointless.\n\nRemoving this flag simplifies some of the code, but some ftrace_disabled\nchecks needed to be added or move around a little.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "3499e461147636bf55c41128d83b679ac6ab2d86",
      "tree": "2e79e9becedf3ac971b02160502c2384f9c3018a",
      "parents": [
        "8ab2b7efd3e2ccf2c2dda3206b8171ecdbd0af40"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Apr 21 22:59:12 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:52:58 2011 -0400"
      },
      "message": "ftrace: Remove failures file\n\nThe failures file in the debugfs tracing directory would list the\nfunctions that failed to convert when the old dead ftrace daemon\ntried to update code but failed. Since this code is now dead along\nwith the daemon the failures file is useless. Remove it.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "8ab2b7efd3e2ccf2c2dda3206b8171ecdbd0af40",
      "tree": "69b3bbcdbbe7deecf3910ee28ee62e07c004a2ea",
      "parents": [
        "0778d9ad33898faab7bf6316108b471790376e35"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Apr 21 22:41:35 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:52:55 2011 -0400"
      },
      "message": "ftrace: Remove unnecessary disabling of irqs\n\nThe disabling of interrupts around ftrace_update_code() was used\nto protect against the evil ftrace daemon from years past. But that\ndaemon has long been killed. It is safe to keep interrupts enabled\nwhile updating the initial mcount into nops.\n\nThe ftrace_mutex is also held which keeps other users at bay.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "0778d9ad33898faab7bf6316108b471790376e35",
      "tree": "c096fedf744e114a01acac52930f2bc8a741e863",
      "parents": [
        "32673822e440eb92eb334631eb0a199d0c532d13"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 29 10:36:31 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:52:52 2011 -0400"
      },
      "message": "ftrace: Make FTRACE_WARN_ON() work in if condition\n\nLet FTRACE_WARN_ON() be used as a stand alone statement or\ninside a conditional: if (FTRACE_WARN_ON(x))\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "058e297d34a404caaa5ed277de15698d8dc43000",
      "tree": "0a4cfa547a4cf466f8c746978ff5fe464cbe88ab",
      "parents": [
        "2bce5daca28346f19c190dbdb5542c9fe3e8c6e6"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Fri Apr 29 22:35:33 2011 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Apr 29 22:42:59 2011 -0400"
      },
      "message": "ftrace: Only update the function code on write to filter files\n\nIf function tracing is enabled, a read of the filter files will\ncause the call to stop_machine to update the function trace sites.\nIt should only call stop_machine on write.\n\nCc: stable@kernel.org\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "1106b6997df7d0c0487e21fd9c9dd2ce3d4a52db",
      "tree": "638a067a0d407948fb5362b794d8de397c6aa421",
      "parents": [
        "8df341cf251f3b77eaaef66f806570e74ab44452"
      ],
      "author": {
        "name": "Jiri Olsa",
        "email": "jolsa@redhat.com",
        "time": "Wed Feb 16 17:35:34 2011 +0100"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Mar 22 12:52:03 2011 -0400"
      },
      "message": "tracing: Fix set_ftrace_filter probe function display\n\nIf one or more function probes (like traceon) are enabled,\nand there\u0027s no other function filter, the first probe\nfunc is skipped (which one depends on the position in the hash).\n\n$ echo sys_open:traceon sys_close:traceon \u003e ./set_ftrace_filter\n$ cat set_ftrace_filter\n#### all functions enabled ####\nsys_close:traceon:unlimited\n$\n\nThe reason was, that in the case of no other function filter,\nthe func_pos was not properly updated before calling t_hash_start.\n\nSigned-off-by: Jiri Olsa \u003cjolsa@redhat.com\u003e\nLKML-Reference: \u003c1297874134-7008-1-git-send-email-jolsa@redhat.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "868baf07b1a259f5f3803c1dc2777b6c358f83cf",
      "tree": "a97caf3db1095ceb806ba53ba7d88d47a153e1b8",
      "parents": [
        "862b6f62bf0cd768910b087f6d051f420206c4d6"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Thu Feb 10 21:26:13 2011 -0500"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Feb 11 16:23:33 2011 -0500"
      },
      "message": "ftrace: Fix memory leak with function graph and cpu hotplug\n\nWhen the fuction graph tracer starts, it needs to make a special\nstack for each task to save the real return values of the tasks.\nAll running tasks have this stack created, as well as any new\ntasks.\n\nOn CPU hot plug, the new idle task will allocate a stack as well\nwhen init_idle() is called. The problem is that cpu hotplug does\nnot create a new idle_task. Instead it uses the idle task that\nexisted when the cpu went down.\n\nftrace_graph_init_task() will add a new ret_stack to the task\nthat is given to it. Because a clone will make the task\nhave a stack of its parent it does not check if the task\u0027s\nret_stack is already NULL or not. When the CPU hotplug code\nstarts a CPU up again, it will allocate a new stack even\nthough one already existed for it.\n\nThe solution is to treat the idle_task specially. In fact, the\nfunction_graph code already does, just not at init_idle().\nInstead of using the ftrace_graph_init_task() for the idle task,\nwhich that function expects the task to be a clone, have a\nseparate ftrace_graph_init_idle_task(). Also, we will create a\nper_cpu ret_stack that is used by the idle task. When we call\nftrace_graph_init_idle_task() it will check if the idle task\u0027s\nret_stack is NULL, if it is, then it will assign it the per_cpu\nret_stack.\n\nReported-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nSuggested-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Stable Tree \u003cstable@kernel.org\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "092e0e7e520a1fca03e13c9f2d157432a8657ff2",
      "tree": "451897252c4c08c4b5a8ef535da156f1e817e80b",
      "parents": [
        "79f14b7c56d3b3ba58f8b43d1f70b9b71477a800",
        "776c163b1b93c8dfa5edba885bc2bfbc2d228a5f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Oct 22 10:52:56 2010 -0700"
      },
      "message": "Merge branch \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl\n\n* \u0027llseek\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:\n  vfs: make no_llseek the default\n  vfs: don\u0027t use BKL in default_llseek\n  llseek: automatically add .llseek fop\n  libfs: use generic_file_llseek for simple_attr\n  mac80211: disallow seeks in minstrel debug code\n  lirc: make chardev nonseekable\n  viotape: use noop_llseek\n  raw: use explicit llseek file operations\n  ibmasmfs: use generic_file_llseek\n  spufs: use llseek in all file operations\n  arm/omap: use generic_file_llseek in iommu_debug\n  lkdtm: use generic_file_llseek in debugfs\n  net/wireless: use generic_file_llseek in debugfs\n  drm: use noop_llseek\n"
    },
    {
      "commit": "907f27840985fe6a0c62e43cd4702c6e04b4bcc7",
      "tree": "1023e32295a25e0602aef4bab14f41b97975f6bd",
      "parents": [
        "f92f6e6ee35d2779aa62e70f78ad8e1cd417eb52"
      ],
      "author": {
        "name": "matt mooney",
        "email": "mfm@muteddisk.com",
        "time": "Mon Sep 27 19:04:53 2010 -0700"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Mon Oct 18 10:53:22 2010 -0400"
      },
      "message": "tracing/trivial: Remove cast from void*\n\nUnnecessary cast from void* in assignment.\n\nSigned-off-by: matt mooney \u003cmfm@muteddisk.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "3aabae7d9dfaed60effe93662f02c19bafc18537",
      "tree": "af94cdd69add07601d9f3f5988dfc1dc255e3886",
      "parents": [
        "79e406d7b00ab2b261ae32a59f266fd3b7af6f29",
        "57c072c7113f54f9512624d6c665db6184448782"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Sep 15 10:27:31 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Sep 15 10:27:31 2010 +0200"
      },
      "message": "Merge branch \u0027tip/perf/core\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into perf/core\n"
    },
    {
      "commit": "79e406d7b00ab2b261ae32a59f266fd3b7af6f29",
      "tree": "e1f635e807691cb634fd63478861938592f226fa",
      "parents": [
        "b304d0441a4118fadd4c3f16e4dc600c271030b5"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Sep 14 22:19:46 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Sep 14 22:19:46 2010 -0400"
      },
      "message": "tracing: Remove leftover FTRACE_ENABLE/DISABLE_MCOUNT enums\n\nThe enums for FTRACE_ENABLE_MCOUNT and FTRACE_DISABLE_MCOUNT were\nused as commands to ftrace_run_update_code(). But these commands\nwere used by the old nasty ftrace daemon that has long been slain.\n\nThis is a clean up patch to remove the references to these enums\nand simplify the code a little.\n\nReported-by: Wu Zhangjin \u003cwuzhangjin@gmail.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    },
    {
      "commit": "57c072c7113f54f9512624d6c665db6184448782",
      "tree": "c005a9325d308763bd1763853395c7b13010b5e3",
      "parents": [
        "98c4fd046f07156ca6055677e8f03d4280be16c1"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Tue Sep 14 11:21:11 2010 -0400"
      },
      "committer": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Sep 14 15:14:20 2010 -0400"
      },
      "message": "tracing: Fix reading of set_ftrace_filter across lists\n\nIf we do:\n\n # cd /sys/kernel/debug\n # echo \u0027do_IRQ:traceon schedule:traceon sys_write:traceon\u0027 \u003e \\\n    set_ftrace_filter\n # cat set_ftrace_filter\n\nWe get the following output:\n\n #### all functions enabled ####\n sys_write:traceon:unlimited\n schedule:traceon:unlimited\n do_IRQ:traceon:unlimited\n\nThis outputs two lists. One is the fact that all functions are\ncurrently enabled for function tracing, the other has three probed\nfunctions, which happen to have \u0027traceon\u0027 as their commands.\n\nCurrently, when reading the first list (functions enabled) the\nseq_file code will receive a \"NULL\" from the t_next() function\ncausing it to exit early. This makes \"read()\" from userspace stop\nreading the code at this boarder. Although read is allowed to do this,\nsome (broken) applications might consider this an end of file and\nstop early.\n\nThis patch adds the start of the second list to t_next() when it\nfinishes the first list. It is a simple change and gives the\nset_ftrace_filter file nicer reading ability.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\n"
    }
  ],
  "next": "98c4fd046f07156ca6055677e8f03d4280be16c1"
}
