)]}'
{
  "commit": "f41d911f8c49a5d65c86504c19e8204bb605c4fd",
  "tree": "59bcd3048652ef290b3e19d2904409afd5c90eb3",
  "parents": [
    "a157229cabd6dd8cfa82525fc9bf730c94cc9ac2"
  ],
  "author": {
    "name": "Paul E. McKenney",
    "email": "paulmck@linux.vnet.ibm.com",
    "time": "Sat Aug 22 13:56:52 2009 -0700"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Sun Aug 23 10:32:40 2009 +0200"
  },
  "message": "rcu: Merge preemptable-RCU functionality into hierarchical RCU\n\nCreate a kernel/rcutree_plugin.h file that contains definitions\nfor preemptable RCU (or, under the #else branch of the #ifdef,\nempty definitions for the classic non-preemptable semantics).\nThese definitions fit into plugins defined in kernel/rcutree.c\nfor this purpose.\n\nThis variant of preemptable RCU uses a new algorithm whose\nread-side expense is roughly that of classic hierarchical RCU\nunder CONFIG_PREEMPT. This new algorithm\u0027s update-side expense\nis similar to that of classic hierarchical RCU, and, in absence\nof read-side preemption or blocking, is exactly that of classic\nhierarchical RCU.  Perhaps more important, this new algorithm\nhas a much simpler implementation, saving well over 1,000 lines\nof code compared to mainline\u0027s implementation of preemptable\nRCU, which will hopefully be retired in favor of this new\nalgorithm.\n\nThe simplifications are obtained by maintaining per-task\nnesting state for running tasks, and using a simple\nlock-protected algorithm to handle accounting when tasks block\nwithin RCU read-side critical sections, making use of lessons\nlearned while creating numerous user-level RCU implementations\nover the past 18 months.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: akpm@linux-foundation.org\nCc: mathieu.desnoyers@polymtl.ca\nCc: josht@linux.vnet.ibm.com\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nLKML-Reference: \u003c12509746134003-git-send-email-\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7fc01b13be43cfdd7b089b2e8498971f6440d253",
      "old_mode": 33188,
      "old_path": "include/linux/init_task.h",
      "new_id": "971a968831bfea01ed54fe8152dfa50e8602fc70",
      "new_mode": 33188,
      "new_path": "include/linux/init_task.h"
    },
    {
      "type": "modify",
      "old_id": "9d85ee19492a27c5810b9dd131ba2df7c07dd261",
      "old_mode": 33188,
      "old_path": "include/linux/rcupdate.h",
      "new_id": "26892f5e7bd81b066dac5246b56df0268c167022",
      "new_mode": 33188,
      "new_path": "include/linux/rcupdate.h"
    },
    {
      "type": "modify",
      "old_id": "aff4772fb49ee99ff1e21c211f67d76bab92bc97",
      "old_mode": 33188,
      "old_path": "include/linux/rcupreempt.h",
      "new_id": "a42ab88e9210d2b9dabf8e559ad8322ae9b85f5b",
      "new_mode": 33188,
      "new_path": "include/linux/rcupreempt.h"
    },
    {
      "type": "modify",
      "old_id": "c739d90f5e688fa3b8a2d4f11aa7e90548e51cba",
      "old_mode": 33188,
      "old_path": "include/linux/rcutree.h",
      "new_id": "a8930771782535d26e4e0d14b9a2c37d00b21682",
      "new_mode": 33188,
      "new_path": "include/linux/rcutree.h"
    },
    {
      "type": "modify",
      "old_id": "3ab08e4bb6b87c608d8e58b3f37e4260c18c1f4e",
      "old_mode": 33188,
      "old_path": "include/linux/sched.h",
      "new_id": "d7f98f637a2a7f08926e7ecba9a16058df0de589",
      "new_mode": 33188,
      "new_path": "include/linux/sched.h"
    },
    {
      "type": "modify",
      "old_id": "25373cf32672c3887a40bcd121d273ddeef692d2",
      "old_mode": 33188,
      "old_path": "init/Kconfig",
      "new_id": "f88da2d1c1fba6dd9fec1fb5508e54bbef989d5e",
      "new_mode": 33188,
      "new_path": "init/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "2419c9d43918c3e0bfb3fa08f60f7d9688e4153d",
      "old_mode": 33188,
      "old_path": "kernel/Makefile",
      "new_id": "1a38b4789dda387e47872a3959fd6208946327d9",
      "new_mode": 33188,
      "new_path": "kernel/Makefile"
    },
    {
      "type": "modify",
      "old_id": "869dc221733e27701c275a0bdf283404507108f6",
      "old_mode": 33188,
      "old_path": "kernel/exit.c",
      "new_id": "263f95ed7201a0069fd11ba75e01bfb16c20aed0",
      "new_mode": 33188,
      "new_path": "kernel/exit.c"
    },
    {
      "type": "modify",
      "old_id": "021e1138556e22ce7b35dbdd06267f67f0057a98",
      "old_mode": 33188,
      "old_path": "kernel/fork.c",
      "new_id": "642e8b5edf00ecb9e4dd2fc8c1f4f7f4fd8805fe",
      "new_mode": 33188,
      "new_path": "kernel/fork.c"
    },
    {
      "type": "modify",
      "old_id": "4ce3adcfa94df16ab844b8a406b55a820496d7ef",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.c",
      "new_id": "cc0255714075c7e318d5313461d113fe9f5899b1",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.c"
    },
    {
      "type": "modify",
      "old_id": "0024e5ddcc6811b096f94f47908a9434541e722a",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.h",
      "new_id": "ca560364d8cd9e92751eec6b5f927a4ff643a867",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cd2ab67400c67834dadc0e55b31c4338cc12935d",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_plugin.h"
    },
    {
      "type": "modify",
      "old_id": "31af3a0fb6d5f41a4f4767d4855548323c36388d",
      "old_mode": 33188,
      "old_path": "kernel/rcutree_trace.c",
      "new_id": "0ea1bff69727c35f17821a14b92738734474ac74",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_trace.c"
    },
    {
      "type": "modify",
      "old_id": "12327b2bb785c256a59cb864a2c2b8976c33e5aa",
      "old_mode": 33188,
      "old_path": "lib/Kconfig.debug",
      "new_id": "f87fb0c8f9243f87543341584931147ec4b3350b",
      "new_mode": 33188,
      "new_path": "lib/Kconfig.debug"
    }
  ]
}
