)]}'
{
  "log": [
    {
      "commit": "41b86e9c510ae66639bf29d3201e1d2384a7fde6",
      "tree": "f340b94f53be08e2fbba2344deb985f9ecb4a036",
      "parents": [
        "20d315d42aed95423a7203e1d7e84086004b5a00"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 09 18:51:58 2007 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 09 18:51:58 2007 +0200"
      },
      "message": "sched: make posix-cpu-timers use CFS\u0027s accounting information\n\nupdate the posix-cpu-timers code to use CFS\u0027s CPU accounting information.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "b5e618181a927210f8be1d3d2249d31904ba358d",
      "tree": "731f1ae4ff1ba56d402bb329182b7d935bb439a1",
      "parents": [
        "db9c02fa8bd50eb104781a9f78cae923d8da1e74"
      ],
      "author": {
        "name": "Pavel Emelianov",
        "email": "xemul@sw.ru",
        "time": "Tue May 08 00:30:19 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:11 2007 -0700"
      },
      "message": "Introduce a handy list_first_entry macro\n\nThere are many places in the kernel where the construction like\n\n   foo \u003d list_entry(head-\u003enext, struct foo_struct, list);\n\nare used.\nThe code might look more descriptive and neat if using the macro\n\n   list_first_entry(head, type, member) \\\n             list_entry((head)-\u003enext, type, member)\n\nHere is the macro itself and the examples of its usage in the generic code.\n If it will turn out to be useful, I can prepare the set of patches to\ninject in into arch-specific code, drivers, networking, etc.\n\nSigned-off-by: Pavel Emelianov \u003cxemul@openvz.org\u003e\nSigned-off-by: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: John McCutchan \u003cttb@tentacle.dhs.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f2ea0837dbc263ce2a2512c4e73c83df68a6a55",
      "tree": "8e033c747852671f3d4d2cb0bc677dab9ecfc441",
      "parents": [
        "7460ed2844ffad7141e30271c0c3da8336e66014"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Feb 16 01:28:22 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:14:00 2007 -0800"
      },
      "message": "[PATCH] posix timers: RCU optimization for clock_gettime()\n\nUse RCU to avoid the need to acquire tasklist_lock in the single-threaded\ncase of clock_gettime().  It still acquires tasklist_lock when for a\n(potentially multithreaded) process.  This change allows realtime\napplications to frequently monitor CPU consumption of individual tasks, as\nrequested (and now deployed) by some off-list users.\n\nThis has been in Ingo Molnar\u0027s -rt patchset since late 2005 with no\nproblems reported, and tests successfully on 2.6.20-rc6, so I believe that\nit is long-since ready for mainline adoption.\n\n[paulmck@linux.vnet.ibm.com: fix exit()/posix_cpu_clock_get() race spotted by Oleg]\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ac08c26492a0ad4d94a25bd47d5630cd38337069",
      "tree": "a6115a173a221ef80a9ffe9b4f110bd4d92443c5",
      "parents": [
        "e24650c2e744f99541125a5b023f0d02cad19d14"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Oct 17 00:09:39 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 17 08:18:43 2006 -0700"
      },
      "message": "[PATCH] posix-cpu-timers: prevent signal delivery starvation\n\nThe integer divisions in the timer accounting code can round the result\ndown to 0.  Adding 0 is without effect and the signal delivery stops.\n\nClamp the division result to minimum 1 to avoid this.\n\nProblem was reported by Seongbae Park \u003cspark@google.com\u003e, who provided\nalso an inital patch.\n\nRoland sayeth:\n\n  I have had some more time to think about the problem, and to reproduce it\n  using Toyo\u0027s test case.  For the record, if my understanding of the problem\n  is correct, this happens only in one very particular case.  First, the\n  expiry time has to be so soon that in cputime_t units (usually 1s/HZ ticks)\n  it\u0027s \u003c nthreads so the division yields zero.  Second, it only affects each\n  thread that is so new that its CPU time accumulation is zero so now+0 is\n  still zero and -\u003eit_*_expires winds up staying zero.  For the VIRT and PROF\n  clocks when cputime_t is tick granularity (or the SCHED clock on\n  configurations where sched_clock\u0027s value only advances on clock ticks), this\n  is not hard to arrange with new threads starting up and blocking before they\n  accumulate a whole tick of CPU time.  That\u0027s what happens in Toyo\u0027s test\n  case.\n\n  Note that in general it is fine for that division to round down to zero,\n  and set each thread\u0027s expiry time to its \"now\" time.  The problem only\n  arises with thread\u0027s whose \"now\" value is still zero, so that now+0 winds up\n  0 and is interpreted as \"not set\" instead of \"\u003e\u003d now\".  So it would be a\n  sufficient and more precise fix to just use max(ticks, 1) inside the loop\n  when setting each it_*_expires value.\n\n  But, it does no harm to round the division up to one and always advance\n  every thread\u0027s expiry time.  If the thread didn\u0027t already fire timers for\n  the expiry time of \"now\", there is no expectation that it will do so before\n  the next tick anyway.  So I followed Thomas\u0027s patch in lifting the max out\n  of the loops.\n\n  This patch also covers the reload cases, which are harder to write a test\n  for (and I didn\u0027t try).  I\u0027ve tested it with Toyo\u0027s case and it fixes that.\n\n[toyoa@mvista.com: fix: min_t -\u003e max_t]\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Daniel Walker \u003cdwalker@mvista.com\u003e\nCc: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Seongbae Park \u003cspark@google.com\u003e\nCc: Peter Mattis \u003cpmattis@google.com\u003e\nCc: Rohit Seth \u003crohitseth@google.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e4b765551aa6355eae60b644bed851a9477c4e2b",
      "tree": "d1636c58e475407e2a770659430d54c7d67d72be",
      "parents": [
        "1711ef3866b0360e102327389fe4b76c849bbe83"
      ],
      "author": {
        "name": "Toyo Abe",
        "email": "toyoa@mvista.com",
        "time": "Fri Sep 29 02:00:29 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:15 2006 -0700"
      },
      "message": "[PATCH] posix-timers: Fix the flags handling in posix_cpu_nsleep()\n\nWhen a posix_cpu_nsleep() sleep is interrupted by a signal more than twice, it\nincorrectly reports the sleep time remaining to the user.  Because\nposix_cpu_nsleep() doesn\u0027t report back to the user when it\u0027s called from\nrestart function due to the wrong flags handling.\n\nThis patch, which applies after previous one, moves the nanosleep() function\nfrom posix_cpu_nsleep() to do_cpu_nanosleep() and cleans up the flags handling\nappropriately.\n\nSigned-off-by: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1711ef3866b0360e102327389fe4b76c849bbe83",
      "tree": "b74a2cb6167840563d450859a571d6685966b771",
      "parents": [
        "9c4751fd0eab5b8ebbfafb28cbcc8e03b0da5933"
      ],
      "author": {
        "name": "Toyo Abe",
        "email": "toyoa@mvista.com",
        "time": "Fri Sep 29 02:00:28 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:15 2006 -0700"
      },
      "message": "[PATCH] posix-timers: Fix clock_nanosleep() doesn\u0027t return the remaining time in compatibility mode\n\nThe clock_nanosleep() function does not return the time remaining when the\nsleep is interrupted by a signal.\n\nThis patch creates a new call out, compat_clock_nanosleep_restart(), which\nhandles returning the remaining time after a sleep is interrupted.  This\npatch revives clock_nanosleep_restart().  It is now accessed via the new\ncall out.  The compat_clock_nanosleep_restart() is used for compatibility\naccess.\n\nSince this is implemented in compatibility mode the normal path is\nvirtually unaffected - no real performance impact.\n\nSigned-off-by: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f53ae1dc3429529a58aa538e0a860d713c7079c3",
      "tree": "fa40b981c48269274183da0bebc9db3cad2c2f92",
      "parents": [
        "30f1e3dd8c72abda343bcf415f7d8894a02b4290"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:12:02 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] arm_timer: remove a racy and obsolete PF_EXITING check\n\narm_timer() checks PF_EXITING to prevent BUG_ON(-\u003eexit_state)\nin run_posix_cpu_timers().\n\nHowever, for some reason it does so only for CPUCLOCK_PERTHREAD\ncase (which is imho wrong).\n\nAlso, this check is not reliable, PF_EXITING could be set on\nanother cpu without any locks/barriers just after the check,\nso it can\u0027t prevent from attaching the timer to the exiting\ntask.\n\nThe previous patch makes this check unneeded.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "30f1e3dd8c72abda343bcf415f7d8894a02b4290",
      "tree": "68ef326814e3b8e6ba0159cc451cef4b71695ea3",
      "parents": [
        "8f17fc20bfb75bcec4cfeda789738979c8338fdc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:11:43 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] run_posix_cpu_timers: remove a bogus BUG_ON()\n\ndo_exit() clears -\u003eit_##clock##_expires, but nothing prevents\nanother cpu to attach the timer to exiting process after that.\narm_timer() tries to protect against this race, but the check\nis racy.\n\nAfter exit_notify() does \u0027write_unlock_irq(\u0026tasklist_lock)\u0027 and\nbefore do_exit() calls \u0027schedule() local timer interrupt can find\ntsk-\u003eexit_state !\u003d 0. If that state was EXIT_DEAD (or another cpu\ndoes sys_wait4) interrupted task has -\u003esignal \u003d\u003d NULL.\n\nAt this moment exiting task has no pending cpu timers, they were\ncleanuped in __exit_signal()-\u003eposix_cpu_timers_exit{,_group}(),\nso we can just return from irq.\n\nJohn Stultz recently confirmed this bug, see\n\n\thttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d115015841413687\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8f17fc20bfb75bcec4cfeda789738979c8338fdc",
      "tree": "ec84c5222de58b4d26507c892d0b8f828a6dce7e",
      "parents": [
        "88d113601ca19c82feb038438c8c5db502d146f9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:11:15 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] check_process_timers: fix possible lockup\n\nIf the local timer interrupt happens just after do_exit() sets PF_EXITING\n(and before it clears -\u003eit_xxx_expires) run_posix_cpu_timers() will call\ncheck_process_timers() with tasklist_lock + -\u003esiglock held and\n\n\tcheck_process_timers:\n\n\t\tt \u003d tsk;\n\t\tdo {\n\t\t\t....\n\n\t\t\tdo {\n\t\t\t\tt \u003d next_thread(t);\n\t\t\t} while (unlikely(t-\u003eflags \u0026 PF_EXITING));\n\t\t} while (t !\u003d tsk);\n\nthe outer loop will never stop.\n\nActually, the window is bigger.  Another process can attach the timer\nafter -\u003eit_xxx_expires was cleared (see the next commit) and the \u0027if\n(PF_EXITING)\u0027 check in arm_timer() is racy (see the one after that).\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "97735f25d2ba898ec5e13746451525580631c834",
      "tree": "a6da1078f04bec45967bd83f340b6f7bde731f5d",
      "parents": [
        "6ba1b91213e81aa92b5cf7539f7d2a94ff54947c"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:37 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:38 2006 -0800"
      },
      "message": "[PATCH] hrtimer: switch clock_nanosleep to hrtimer nanosleep API\n\nSwitch clock_nanosleep to use the new nanosleep functions in hrtimer.c\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a924b04ddea9788e09f387fe19ccbede5f09ddd8",
      "tree": "aa519a2427b7686d35ceae764d3e37d69a6ae5e8",
      "parents": [
        "57a558757bdbb877b54ed5ea15bd0892e02a707d"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:27 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:36 2006 -0800"
      },
      "message": "[PATCH] hrtimer: make clockid_t arguments const\n\nadd const arguments to the posix-timers.h API functions\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0aec63e67c69545ca757a73a66f5dcf05fa484bf",
      "tree": "f01b80fd415389506b2a719831dfd6a90c0b258f",
      "parents": [
        "0feb9bfcfa3f9bf67a4a1e3f2608700ad73f92ed"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Jan 06 15:36:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 20:23:04 2006 -0800"
      },
      "message": "[PATCH] Fix posix-cpu-timers sched_time accumulation\n\nI\u0027ve spent the past 3 days digging into a glibc testsuite failure in\ncurrent CVS, specifically libc/rt/tst-cputimer1.c The thr1 and thr2\ntimers fire too early in the second pass of this test.  The second\npass is noteworthy because it makes use of intervals, whereas the\nfirst pass does not.\n\nAll throughout the posix-cpu-timers.c code, the calculation of the\nprocess sched_time sum is implemented roughly as:\n\n\tunsigned long long sum;\n\n\tsum \u003d tsk-\u003esignal-\u003esched_time;\n\tt \u003d tsk;\n\tdo {\n\t\tsum +\u003d t-\u003esched_time;\n\t\tt \u003d next_thread(t);\n\t} while (t !\u003d tsk);\n\nIn fact this is the exact scheme used by check_process_timers().\n\nIn the case of check_process_timers(), current-\u003esched_time has just\nbeen updated (via scheduler_tick(), which is invoked by\nupdate_process_times(), which subsequently invokes\nrun_posix_cpu_timers()) So there is no special processing necessary\nwrt. that.\n\nIn other contexts, we have to allot for the fact that tsk-\u003esched_time\nmight be a bit out of date if we are current.  And the\nposix-cpu-timers.c code uses current_sched_time() to deal with that.\n\nUnfortunately it does so in an erroneous and inconsistent manner in\none spot which is what results in the early timer firing.\n\nIn cpu_clock_sample_group_locked(), it does this:\n\n\t\tcpu-\u003esched \u003d p-\u003esignal-\u003esched_time;\n\t\t/* Add in each other live thread.  */\n\t\twhile ((t \u003d next_thread(t)) !\u003d p) {\n\t\t\tcpu-\u003esched +\u003d t-\u003esched_time;\n\t\t}\n\t\tif (p-\u003etgid \u003d\u003d current-\u003etgid) {\n\t\t\t/*\n\t\t\t * We\u0027re sampling ourselves, so include the\n\t\t\t * cycles not yet banked.  We still omit\n\t\t\t * other threads running on other CPUs,\n\t\t\t * so the total can always be behind as\n\t\t\t * much as max(nthreads-1,ncpus) * (NSEC_PER_SEC/HZ).\n\t\t\t */\n\t\t\tcpu-\u003esched +\u003d current_sched_time(current);\n\t\t} else {\n\t\t\tcpu-\u003esched +\u003d p-\u003esched_time;\n\t\t}\n\nThe problem is the \"p-\u003etgid \u003d\u003d current-\u003etgid\" test.  If \"p\" is\nnot current, and the tgids are the same, we will add the process\nt-\u003esched_time twice into cpu-\u003esched and omit \"p\"\u0027s sched_time\nwhich is very very very wrong.\n\nposix-cpu-timers.c has a helper function, sched_ns(p) which takes care\nof this, so my fix is to use that here instead of this special tgid\ntest.\n\nThe fact that current can be one of the sub-threads of \"p\" points out\nthat we could make things a little bit more accurate, perhaps by using\nsched_ns() on every thread we process in these loops.  It also points\nout that we don\u0027t use the most accurate value for threads in the group\nactively running other cpus (and this is mentioned in the comment).\n\nBut that is a future enhancement, and this fix here definitely makes\nsense.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ee500f274914653a7d3dfca7d0140a3d21658e32",
      "tree": "4b2b664e220e09d1a9cbcd69edebb16707b41e9b",
      "parents": [
        "46596338a10a54550ff03a6f60c28145a080296b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Nov 28 13:43:55 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 28 14:42:23 2005 -0800"
      },
      "message": "[PATCH] fix 32bit overflow in timespec_to_sample()\n\nfix 32bit overflow in timespec_to_sample()\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7fd93cf30c531fd8b014e827e7a85fcfc010b2c6",
      "tree": "38326a3b27a04845f86054c85ebeda0d1170d87a",
      "parents": [
        "863c84b97cb660dbb949398e196c0b1bbe4ed39f"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Mon Nov 07 00:57:59 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 07:53:24 2005 -0800"
      },
      "message": "[PATCH] posix-timers `unlikely\u0027 rejig\n\n!unlikely(expr) hurts my brain.   likely(!expr) is more straightforward.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "708f430dcc50787d1c0b5c31962a5ff0dd8e35eb",
      "tree": "5c37085047a9c83555607e8811423da4dd3ed4ed",
      "parents": [
        "a241ec65aeac3d69a08a7b153cccbdb7ea35063f"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Sun Oct 30 15:03:13 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:27 2005 -0800"
      },
      "message": "[PATCH] posix-cpu-timers: fix overrun reporting\n\nThis change corrects an omission in posix_cpu_timer_schedule, so that it\ncorrectly propagates the overrun calculation to where it will get reported\nto the user.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "72ab373a5688a78cbdaf3bf96012e597d5399bb7",
      "tree": "906d4857e3cebe48649c4459acb78dca698d58c0",
      "parents": [
        "a362f463a6d316d14daed0f817e151835ce97ff7"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Thu Oct 27 03:16:42 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:08:43 2005 -0700"
      },
      "message": "[PATCH] Yet more posix-cpu-timer fixes\n\nThis just makes sure that a thread\u0027s expiry times can\u0027t get reset after\nit clears them in do_exit.\n\nThis is what allowed us to re-introduce the stricter BUG_ON() check in\na362f463a6d316d14daed0f817e151835ce97ff7.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a362f463a6d316d14daed0f817e151835ce97ff7",
      "tree": "99b510438f9c88860ae17f1233cf21be24a152e3",
      "parents": [
        "7a4ed937aa44acdeb8c6ba671509dc7b54b09d3a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:07:33 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:07:33 2005 -0700"
      },
      "message": "Revert \"remove false BUG_ON() from run_posix_cpu_timers()\"\n\nThis reverts commit 3de463c7d9d58f8cf3395268230cb20a4c15bffa.\n\nRoland has another patch that allows us to leave the BUG_ON() in place\nby just making sure that the condition it tests for really is always\ntrue.\n\nThat goes in next.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7a4ed937aa44acdeb8c6ba671509dc7b54b09d3a",
      "tree": "b602abc9445b2c4a10788147c58a28fe1f4e63f7",
      "parents": [
        "e02fd44056dd8077b49b4bd92c5799a75e89cd65"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed Oct 26 20:26:53 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 15:21:14 2005 -0700"
      },
      "message": "[PATCH] Fix cpu timers expiration time\n\nThere\u0027s a silly off-by-one error in the code that updates the expiration\nof posix CPU timers, causing them to not be properly updated when they\nhit exactly on their expiration time (which should be the normal case).\n\nThis causes them to then fire immediately again, and only _then_ get\nproperly updated.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "70ab81c2ed3d1323e7d6805bf59cbb570dff7937",
      "tree": "7679256f81780842aa443846f4cea7524c0db37a",
      "parents": [
        "b0917bd912d3708c50e1df1b5e1648d0547108a3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 11:23:06 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 11:23:06 2005 -0700"
      },
      "message": "posix cpu timers: fix timer ordering\n\nPointed out by Oleg Nesterov, who has been walking over the code\nforwards and backwards.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a69ac4a78d8bd9e1ec478bd7297d4f047fcd44a8",
      "tree": "a56edf4f69cc01c6d4b7b3eeee3646c7ea9810df",
      "parents": [
        "ca531a0a5e01e5122f67cb6aca8fcbfc70e18e0b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 18:29:58 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:13:14 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix posix_cpu_timer_set() vs run_posix_cpu_timers() race\n\nThis might be harmless, but looks like a race from code inspection (I\nwas unable to trigger it).  I must admit, I don\u0027t understand why we\ncan\u0027t return TIMER_RETRY after \u0027spin_unlock(\u0026p-\u003esighand-\u003esiglock)\u0027\nwithout doing bump_cpu_timer(), but this is what original code does.\n\nposix_cpu_timer_set:\n\n\tread_lock(\u0026tasklist_lock);\n\n\tspin_lock(\u0026p-\u003esighand-\u003esiglock);\n\tlist_del_init(\u0026timer-\u003eit.cpu.entry);\n\tspin_unlock(\u0026p-\u003esighand-\u003esiglock);\n\nWe are probaly deleting the timer from run_posix_cpu_timers\u0027s \u0027firing\u0027\nlocal list_head while run_posix_cpu_timers() does list_for_each_safe.\n\nVarious bad things can happen, for example we can just delete this timer\nso that list_for_each() will not notice it and run_posix_cpu_timers()\nwill not reset \u0027-\u003efiring\u0027 flag. In that case,\n\n\t....\n\n\tif (timer-\u003eit.cpu.firing) {\n\t\tread_unlock(\u0026tasklist_lock);\n\t\ttimer-\u003eit.cpu.firing \u003d -1;\n\t\treturn TIMER_RETRY;\n\t}\n\nsys_timer_settime() goes to \u0027retry:\u0027, calls posix_cpu_timer_set() again,\nit returns TIMER_RETRY ...\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca531a0a5e01e5122f67cb6aca8fcbfc70e18e0b",
      "tree": "4dc28c012d1bb78aba82acdcd2462d17020ba77e",
      "parents": [
        "3de463c7d9d58f8cf3395268230cb20a4c15bffa"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 14:36:28 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: exit path cleanup\n\nNo need to rebalance when task exited\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3de463c7d9d58f8cf3395268230cb20a4c15bffa",
      "tree": "20ba1584eefb7ed75f6f8536f40e55966294cf4f",
      "parents": [
        "108150ea78003044e41150c75259447b2c0953b6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 14:34:03 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: remove false BUG_ON() from run_posix_cpu_timers()\n\ndo_exit() clears -\u003eit_##clock##_expires, but nothing prevents\nanother cpu to attach the timer to exiting process after that.\n\nAfter exit_notify() does \u0027write_unlock_irq(\u0026tasklist_lock)\u0027 and\nbefore do_exit() calls \u0027schedule() local timer interrupt can find\ntsk-\u003eexit_state !\u003d 0. If that state was EXIT_DEAD (or another cpu\ndoes sys_wait4) interrupted task has -\u003esignal \u003d\u003d NULL.\n\nAt this moment exiting task has no pending cpu timers, they were cleaned\nup in __exit_signal()-\u003eposix_cpu_timers_exit{,_group}(), so we can just\nreturn from irq.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "108150ea78003044e41150c75259447b2c0953b6",
      "tree": "ffe0b7e59e6ca1c8a4dad18110e485e5c72872bc",
      "parents": [
        "ba9e358fd04190a59e605c2963a15e014139a707"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Sun Oct 23 20:25:39 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix cleanup_timers() and run_posix_cpu_timers() races\n\n1. cleanup_timers() sets timer-\u003etask \u003d NULL under tasklist + -\u003esighand locks.\n   That means that this code in posix_cpu_timer_del() and posix_cpu_timer_set()\n\n   \t\tlock_timer(timer);\n\t\tif (timer-\u003etask \u003d\u003d NULL)\n\t\t\treturn;\n\t\tread_lock(tasklist);\n\t\tput_task_struct(timer-\u003etask)\n\n   is racy. With this patch timer-\u003etask modified and accounted only under\n   timer-\u003eit_lock. Sadly, this means that dead task_struct won\u0027t be freed\n   until timer deleted or armed.\n\n2. run_posix_cpu_timers() collects expired timers into local list under\n   tasklist + -\u003esighand again. That means that posix_cpu_timer_del()\n   should check timer-\u003eit.cpu.firing under these locks too.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e80eda94d3eaf1d12cfc97878eff77cd679dabc9",
      "tree": "38ab17e7b9839297708a6982d661c3725d181c3a",
      "parents": [
        "d475f3f47a0427dfee483cecf9a7e9109e991423"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 23 10:02:50 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 23 10:02:50 2005 -0700"
      },
      "message": "Posix timers: limit number of timers firing at once\n\nBursty timers aren\u0027t good for anybody, very much including latency for\nother programs when we trigger lots of timers in interrupt context.  So\nset a random limit, after which we\u0027ll handle the rest on the next timer\ntick.\n\nNoted by Oleg Nesterov \u003coleg@tv-sign.ru\u003e\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9465bee863bc4c6cf1566c12d6f92a8133e3da5c",
      "tree": "339f5d3f7554afe2226eb6bdf9fa63851ae73311",
      "parents": [
        "0213df74315bbab9ccaa73146f3e11972ea6de46"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 21 15:36:00 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 21 15:36:00 2005 -0700"
      },
      "message": "Revert \"Fix cpu timers exit deadlock and races\"\n\nRevert commit e03d13e985d48ac4885382c9e3b1510c78bd047f, to be replaced\nby a much nicer fix from Roland.\n"
    },
    {
      "commit": "e03d13e985d48ac4885382c9e3b1510c78bd047f",
      "tree": "04a124c1759f4b16e21fd04031ee9677fab58021",
      "parents": [
        "3359b54c8c07338f3a863d1109b42eebccdcf379"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Oct 19 22:21:23 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 19 23:02:01 2005 -0700"
      },
      "message": "[PATCH] Fix cpu timers exit deadlock and races\n\nOleg Nesterov reported an SMP deadlock.  If there is a running timer\ntracking a different process\u0027s CPU time clock when the process owning\nthe timer exits, we deadlock on tasklist_lock in posix_cpu_timer_del via\nexit_itimers.\n\nThat code was using tasklist_lock to check for a race with __exit_signal\nbeing called on the timer-target task and clearing its -\u003esignal.\nHowever, there is actually no such race.  __exit_signal will have called\nposix_cpu_timers_exit and posix_cpu_timers_exit_group before it does\nthat.  Those will clear those k_itimer\u0027s association with the dying\ntask, so posix_cpu_timer_del will return early and never reach the code\nin question.\n\nIn addition, posix_cpu_timer_del called from exit_itimers during execve\nor directly from timer_delete in the process owning the timer can race\nwith an exiting timer-target task to cause a double put on timer-target\ntask struct.  Make sure we always access cpu_timers lists with sighand\nlock held.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Chris Wright \u003cchrisw@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "47d6b08334a43fafa61a587f721fa21ef65d81be",
      "tree": "57e9082d0011a4ada210878be2b90c2ede14451a",
      "parents": [
        "6ce969171d5187f7621be68c0ebbc7fb02ec53f1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 17 18:49:42 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 17 15:00:00 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix task accounting\n\nMake sure we release the task struct properly when releasing pending\ntimers.\n\nrelease_task() does write_lock_irq(\u0026tasklist_lock), so it can\u0027t race\nwith run_posix_cpu_timers() on any cpu.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
