)]}'
{
  "commit": "9b2e4f1880b789be1f24f9684f7a54b90310b5c0",
  "tree": "1fa922e0616e298837a7079cb49118188a58186c",
  "parents": [
    "b804cb9e91c6c304959c69d4f9daeef4ffdba71c"
  ],
  "author": {
    "name": "Paul E. McKenney",
    "email": "paul.mckenney@linaro.org",
    "time": "Fri Sep 30 12:10:22 2011 -0700"
  },
  "committer": {
    "name": "Paul E. McKenney",
    "email": "paulmck@linux.vnet.ibm.com",
    "time": "Sun Dec 11 10:31:24 2011 -0800"
  },
  "message": "rcu: Track idleness independent of idle tasks\n\nEarlier versions of RCU used the scheduling-clock tick to detect idleness\nby checking for the idle task, but handled idleness differently for\nCONFIG_NO_HZ\u003dy.  But there are now a number of uses of RCU read-side\ncritical sections in the idle task, for example, for tracing.  A more\nfine-grained detection of idleness is therefore required.\n\nThis commit presses the old dyntick-idle code into full-time service,\nso that rcu_idle_enter(), previously known as rcu_enter_nohz(), is\nalways invoked at the beginning of an idle loop iteration.  Similarly,\nrcu_idle_exit(), previously known as rcu_exit_nohz(), is always invoked\nat the end of an idle-loop iteration.  This allows the idle task to\nuse RCU everywhere except between consecutive rcu_idle_enter() and\nrcu_idle_exit() calls, in turn allowing architecture maintainers to\nspecify exactly where in the idle loop that RCU may be used.\n\nBecause some of the userspace upcall uses can result in what looks\nto RCU like half of an interrupt, it is not possible to expect that\nthe irq_enter() and irq_exit() hooks will give exact counts.  This\npatch therefore expands the -\u003edynticks_nesting counter to 64 bits\nand uses two separate bitfields to count process/idle transitions\nand interrupt entry/exit transitions.  It is presumed that userspace\nupcalls do not happen in the idle loop or from usermode execution\n(though usermode might do a system call that results in an upcall).\nThe counter is hard-reset on each process/idle transition, which\navoids the interrupt entry/exit error from accumulating.  Overflow\nis avoided by the 64-bitness of the -\u003edyntick_nesting counter.\n\nThis commit also adds warnings if a non-idle task asks RCU to enter\nidle state (and these checks will need some adjustment before applying\nFrederic\u0027s OS-jitter patches (http://lkml.org/lkml/2011/10/7/246).\nIn addition, validation of -\u003edynticks and -\u003edynticks_nesting is added.\n\nSigned-off-by: Paul E. McKenney \u003cpaul.mckenney@linaro.org\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nReviewed-by: Josh Triplett \u003cjosh@joshtriplett.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "aaf65f6c6cd7845e7cf671366671b713bcd8fe16",
      "old_mode": 33188,
      "old_path": "Documentation/RCU/trace.txt",
      "new_id": "49587abfc2f77cd3e9872efcf34bee4b9ac6e22f",
      "new_mode": 33188,
      "new_path": "Documentation/RCU/trace.txt"
    },
    {
      "type": "modify",
      "old_id": "f743883f769e9bb38d82c901e19b5fdd7a1eada8",
      "old_mode": 33188,
      "old_path": "include/linux/hardirq.h",
      "new_id": "bb7f30971858ca5127de592cdaa0cec227935384",
      "new_mode": 33188,
      "new_path": "include/linux/hardirq.h"
    },
    {
      "type": "modify",
      "old_id": "2cf4226ade7e60c11ed6d0a3d3f1a4f90496bc24",
      "old_mode": 33188,
      "old_path": "include/linux/rcupdate.h",
      "new_id": "cd1ad4b04c6d69ac2d2554d5815df49bdac85f98",
      "new_mode": 33188,
      "new_path": "include/linux/rcupdate.h"
    },
    {
      "type": "modify",
      "old_id": "b232ccc0ee291d8297d1fd40b07ab999979bc3cb",
      "old_mode": 33188,
      "old_path": "include/linux/tick.h",
      "new_id": "ca40838fdfb7233e259da25b37818f4a1f335837",
      "new_mode": 33188,
      "new_path": "include/linux/tick.h"
    },
    {
      "type": "modify",
      "old_id": "669fbd62ec255885ea875731f197a6e728212d8a",
      "old_mode": 33188,
      "old_path": "include/trace/events/rcu.h",
      "new_id": "e5771804c5073b0eebd7893d921e756e3976167a",
      "new_mode": 33188,
      "new_path": "include/trace/events/rcu.h"
    },
    {
      "type": "modify",
      "old_id": "636af6d9c6e565ca6e6d7010941501901c8322b4",
      "old_mode": 33188,
      "old_path": "kernel/rcutiny.c",
      "new_id": "3ab77bdc90c4a11b29e3c3a47bc81d4fefef740f",
      "new_mode": 33188,
      "new_path": "kernel/rcutiny.c"
    },
    {
      "type": "modify",
      "old_id": "5d0b55a3a8c002925d75223dd4e6e320040caa7a",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.c",
      "new_id": "1c40326724f65f9bacecd2b8cec4381b6d6f0f2f",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.c"
    },
    {
      "type": "modify",
      "old_id": "517f2f89a29323f6f7eed3c12f96f6cc7352cd72",
      "old_mode": 33188,
      "old_path": "kernel/rcutree.h",
      "new_id": "0963fa1541acd0094531c5ec308e050266595b09",
      "new_mode": 33188,
      "new_path": "kernel/rcutree.h"
    },
    {
      "type": "modify",
      "old_id": "59c7bee4ce0f78c3760bef6fe4267cf30b34ca31",
      "old_mode": 33188,
      "old_path": "kernel/rcutree_trace.c",
      "new_id": "654cfe67f0d1fe2d44198e5a70991e1ef1d5b4bf",
      "new_mode": 33188,
      "new_path": "kernel/rcutree_trace.c"
    },
    {
      "type": "modify",
      "old_id": "40420644d0baa365c5d6d02027be9c1d59b0cd5a",
      "old_mode": 33188,
      "old_path": "kernel/time/tick-sched.c",
      "new_id": "5d9d23665f12fe16fa947b98b0afc7172c26b342",
      "new_mode": 33188,
      "new_path": "kernel/time/tick-sched.c"
    }
  ]
}
