)]}'
{
  "log": [
    {
      "commit": "6ba1b91213e81aa92b5cf7539f7d2a94ff54947c",
      "tree": "0d461bf7c7f444a80d09f09501e9fb378a78220f",
      "parents": [
        "10c94ec16dd187f8d8dfdbb088e98330c05bf03c"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:36 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:38 2006 -0800"
      },
      "message": "[PATCH] hrtimer: switch sys_nanosleep to hrtimer\n\nconvert sys_nanosleep() to use hrtimer_nanosleep()\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": "c0a3132963db68f1fbbd0e316b73de100fee3f08",
      "tree": "cdd76aacf0ca7ae7780696a06bf9643f8b245ba1",
      "parents": [
        "97fc79f97b1111c80010d34ee66312b88f531e41"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:32 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:37 2006 -0800"
      },
      "message": "[PATCH] hrtimer: hrtimer core code\n\nhrtimer subsystem core.  It is initialized at bootup and expired by the timer\ninterrupt, but is otherwise not utilized by any other subsystem yet.\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": "97a41e26124330e41aa10ef88cd1711bc3d17460",
      "tree": "1546db361efaf926c7a970e3ec6044ea8d4b6f4c",
      "parents": [
        "b7b4d7a4666454b40b45a853bd1d296af37a85f0"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Sun Jan 08 01:02:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:48 2006 -0800"
      },
      "message": "[PATCH] kernel/: small cleanups\n\nThis patch contains the following cleanups:\n- make needlessly global functions static\n- every file should include the headers containing the prototypes for\n  it\u0027s global functions\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nAcked-by: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ecea8d19c9f0ebd62ddaa07fc919ff4e4b820d99",
      "tree": "189de0b898157618fbf08ec6e4adc8e5cce71ec3",
      "parents": [
        "371e8c25b65f2fe7942868a8a67129d571e94076"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sun Oct 30 15:03:00 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:25 2005 -0800"
      },
      "message": "[PATCH] jiffies_64 cleanup\n\nDefine jiffies_64 in kernel/timer.c rather than having 24 duplicated\ndefines in each architecture.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dfc4f94d2ff95fc92127d3e512c1df7cab274fb8",
      "tree": "c9ed4d74147a3674816f59cf9fbeb69e2cb6afe4",
      "parents": [
        "89ada67917f516212452443a56b9fd3b65b74dc7"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Oct 30 15:02:03 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:18 2005 -0800"
      },
      "message": "[PATCH] remove timer debug field\n\nRemove timer_list.magic and associated debugging code.\n\nI originally added this when a spinlock was added to timer_list - this meant\nthat an all-zeroes timer became illegal and init_timer() was required.\n\nThat spinlock isn\u0027t even there any more, although timer.base must now be\ninitialised.\n\nI\u0027ll keep this debugging code in -mm.\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a5a0d52c7305cb3629ef0cc9e2e0e106869e1907",
      "tree": "11be2b00bc455e8f0dbe280b64932bdb7369bde0",
      "parents": [
        "1bb34a412750291e4e5e9f1d0fe7ae1b7e976098"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Oct 30 15:01:42 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:18 2005 -0800"
      },
      "message": "[PATCH] ntp whitespace cleanup\n\nFix bizarre 4-space coding style in the NTP code.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1bb34a412750291e4e5e9f1d0fe7ae1b7e976098",
      "tree": "00d481a2ff4302f444fbf7c31e5e661f79dc85a9",
      "parents": [
        "9c0cbd54ce0397017a823484f9a8054ab369b8a2"
      ],
      "author": {
        "name": "john stultz",
        "email": "johnstul@us.ibm.com",
        "time": "Sun Oct 30 15:01:42 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:18 2005 -0800"
      },
      "message": "[PATCH] NTP shift_right cleanup\n\nCreate a macro shift_right() that avoids the numerous ugly conditionals in the\nNTP code that look like:\n\n        if(a \u003c 0)\n                b \u003d -(-a \u003e\u003e shift);\n        else\n                b \u003d a \u003e\u003e shift;\n\nReplacing it with:\n\n        b \u003d shift_right(a, shift);\n\nThis should have zero effect on the logic, however it should probably have\na bit of testing just to be sure.\n\nAlso replace open-coded min/max with the macros.\n\nSigned-off-by : John Stultz \u003cjohnstul@us.ibm.com\u003e\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a8db2db1e6a8d323d87a67c5391d48fe2b97faf5",
      "tree": "0aa5fb9f80e4a476e097337104a3e1f94f39a96e",
      "parents": [
        "9e4e23bccb127fac109e765dfb7f9372661cb415"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Sun Oct 30 15:01:38 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:17 2005 -0800"
      },
      "message": "[PATCH] introduce setup_timer() helper\n\nEvery user of init_timer() also needs to initialize -\u003efunction and -\u003edata\nfields.  This patch adds a simple setup_timer() helper for that.\n\nThe schedule_timeout() is patched as an example of usage.\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": "4b8f573b5db02a3017afbba49026a6aef480174f",
      "tree": "4abf19125526809d4be44cb83373f85605854575",
      "parents": [
        "930fc45a49ddebe7555cc5c837d82b9c27e65ff4"
      ],
      "author": {
        "name": "YOSHIFUJI Hideaki",
        "email": "yoshfuji@linux-ipv6.org",
        "time": "Sat Oct 29 18:15:42 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 29 21:40:35 2005 -0700"
      },
      "message": "[PATCH] TIMERS: add missing compensation for HZ \u003d\u003d 250\n\nAdd missing compensation for (HZ \u003d\u003d 250) !\u003d (1 \u003c\u003c SHIFT_HZ) in\nsecond_overflow().\n\nSigned-off-by: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8a1c17574a01555e5d3fdf56d8d72969904c91ca",
      "tree": "9855d1048c2547ac9292c5e4c09c2a88f3b3e4fb",
      "parents": [
        "498d0c5711094b0e1fd93f5355d270ccebdec706"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Tue Sep 13 01:25:15 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 13 08:22:29 2005 -0700"
      },
      "message": "[PATCH] schedule_timeout_[un]interruptible() speedup\n\nThese functions don\u0027t need schedule_timeout()\u0027s barrier.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "75bcc8c5e1de78616b04ef9f317a293a7c1c163c",
      "tree": "fabdfd7fbc46baae5638b41648444d805e14eb3c",
      "parents": [
        "041e0e3b1970c508dc9a95b7dd9dc86271a7d7ac"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@us.ibm.com",
        "time": "Sat Sep 10 00:27:24 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Sep 10 10:06:37 2005 -0700"
      },
      "message": "[PATCH] kernel: fix-up schedule_timeout() usage\n\nUse schedule_timeout_{,un}interruptible() instead of\nset_current_state()/schedule_timeout() to reduce kernel size.\n\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "64ed93a268bc18fa6f72f61420d0e0022c5e38d1",
      "tree": "1332ce542510b88014767f3536d9150710a2f3f9",
      "parents": [
        "672289e9faa56acd4e39ad866ea258b7be7c99a6"
      ],
      "author": {
        "name": "Nishanth Aravamudan",
        "email": "nacc@us.ibm.com",
        "time": "Sat Sep 10 00:27:21 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Sep 10 10:06:36 2005 -0700"
      },
      "message": "[PATCH] add schedule_timeout_{,un}interruptible() interfaces\n\nAdd schedule_timeout_{,un}interruptible() interfaces so that\nschedule_timeout() callers don\u0027t have to worry about forgetting to add the\nset_current_state() call beforehand.\n\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "486d46aefe7ded0d343e306be740edd972aff740",
      "tree": "e750143e578503b77a66eff21595b16730506802",
      "parents": [
        "9f4a6dce10941380ad7365cc9b0ef038ed56cbf9"
      ],
      "author": {
        "name": "Alex Williamson",
        "email": "alex.williamson@hp.com",
        "time": "Tue Sep 06 15:17:04 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:24 2005 -0700"
      },
      "message": "[PATCH] optimize writer path in time_interpolator_get_counter()\n\n      Christoph Lameter \u003cclameter@engr.sgi.com\u003e\n\nWhen using a time interpolator that is susceptible to jitter there\u0027s\npotentially contention over a cmpxchg used to prevent time from going\nbackwards.  This is unnecessary when the caller holds the xtime write\nseqlock as all readers will be blocked from returning until the write is\ncomplete.  We can therefore allow writers to insert a new value and exit\nrather than fight with CPUs who only hold a reader lock.\n\nSigned-off-by: Alex Williamson \u003calex.williamson@hp.com\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8446f1d391f3d27e6bf9c43d4cbcdac0ca720417",
      "tree": "738853af877c9a391b4f2db467e7f90c6e2e38ed",
      "parents": [
        "4732efbeb997189d9f9b04708dc26bf8613ed721"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Sep 06 15:16:27 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:17 2005 -0700"
      },
      "message": "[PATCH] detect soft lockups\n\nThis patch adds a new kernel debug feature: CONFIG_DETECT_SOFTLOCKUP.\n\nWhen enabled then per-CPU watchdog threads are started, which try to run\nonce per second.  If they get delayed for more than 10 seconds then a\ncallback from the timer interrupt detects this condition and prints out a\nwarning message and a stack dump (once per lockup incident).  The feature\nis otherwise non-intrusive, it doesnt try to unlock the box in any way, it\nonly gets the debug info out, automatically, and on all CPUs affected by\nthe lockup.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-Off-By: Matthias Urlichs \u003csmurf@smurf.noris.de\u003e\nSigned-off-by: Richard Purdie \u003crpurdie@rpsys.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4c5640cb5f5a6fd780d99397eca028b575cb1206",
      "tree": "3f5eb4b4390ea71031eb2c93261052e6698cbdc1",
      "parents": [
        "3f024c1a4bc8ef9a149879351ce8b3aa749e0c2f"
      ],
      "author": {
        "name": "David Meybohm",
        "email": "dmeybohmlkml@bellsouth.net",
        "time": "Mon Aug 22 13:11:08 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Aug 23 11:44:29 2005 -0700"
      },
      "message": "[PATCH] preempt race in getppid\n\nWith CONFIG_PREEMPT \u0026\u0026 !CONFIG_SMP, it\u0027s possible for sys_getppid to\nreturn a bogus value if the parent\u0027s task_struct gets reallocated after\ncurrent-\u003egroup_leader-\u003ereal_parent is read:\n\n        asmlinkage long sys_getppid(void)\n        {\n                int pid;\n                struct task_struct *me \u003d current;\n                struct task_struct *parent;\n\n                parent \u003d me-\u003egroup_leader-\u003ereal_parent;\nRACE HERE \u003d\u003e    for (;;) {\n                        pid \u003d parent-\u003etgid;\n        #ifdef CONFIG_SMP\n        {\n                        struct task_struct *old \u003d parent;\n\n                        /*\n                         * Make sure we read the pid before re-reading the\n                         * parent pointer:\n                         */\n                        smp_rmb();\n                        parent \u003d me-\u003egroup_leader-\u003ereal_parent;\n                        if (old !\u003d parent)\n                                continue;\n        }\n        #endif\n                        break;\n                }\n                return pid;\n        }\n\nIf the process gets preempted at the indicated point, the parent process\ncan go ahead and call exit() and then get wait()\u0027d on to reap its\ntask_struct. When the preempted process gets resumed, it will not do any\nfurther checks of the parent pointer on !CONFIG_SMP: it will read the\nbad pid and return.\n\nSo, the same algorithm used when SMP is enabled should be used when\npreempt is enabled, which will recheck -\u003ereal_parent in this case.\n\nSigned-off-by: David Meybohm \u003cdmeybohmlkml@bellsouth.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "96ec3efdcbaea4f403f2a5f1204edbf903a01961",
      "tree": "e76ac60d389be7e7ed40e5bf2cd63f46b84b7e87",
      "parents": [
        "b20f3ae5f0efe1812d2a1278e2127a335884d445"
      ],
      "author": {
        "name": "Domen Puncer",
        "email": "domen@coderock.org",
        "time": "Sat Jun 25 14:58:43 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Jun 25 16:24:58 2005 -0700"
      },
      "message": "[PATCH] kernel/timer: fix msleep_interruptible() comment\n\nThe comment for msleep_interruptible() is wrong, as it will ignore\nwait-queue events, but will wake up early for signals.\n\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nSigned-off-by: Domen Puncer \u003cdomen@coderock.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "be5b4fbd017d12e0d09ea0528a5839ce2ed2c8c8",
      "tree": "212a43003d1c4265718f53502547f36acbec143d",
      "parents": [
        "dcd497f99a1ef29a7c5e76142965be77e9dacabd"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "juhl-lkml@dif.dk",
        "time": "Thu Jun 23 00:09:09 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:19 2005 -0700"
      },
      "message": "[PATCH] preempt_count is int - remove cast and don\u0027t assign to unsigned type\n\nIn kernel/sched.c the return value from preempt_count() is cast to an int.\nThat made sense when preempt_count was defined as different types on is not\nneeded and should go away.  The patch removes the cast.\n\nIn kernel/timer.c the return value from preempt_count() is assigned to a\nvariable of type u32 and then that unsigned value is later compared to\npreempt_count().  Since preempt_count() returns an int, an int is what\nshould be used to store its return value.  Storing the result in an\nunsigned 32bit integer made a tiny bit of sense back when preempt_count was\ndifferent types on different archs, but no more - let\u0027s not play signed vs\nunsigned comparison games when we don\u0027t have to.  The patch modifies the\ncode to use an int to hold the value.  While I was around that bit of code\nI also made two changes to a nearby (related) printk() - I modified it to\nspecify the loglevel explicitly and also broke the line into a few pieces\nto avoid it being longer than 80 chars and clarified the text a bit.\n\nSigned-off-by: Jesper Juhl \u003cjuhl-lkml@dif.dk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fd450b7318b75343fd76b3d95416853e34e72c95",
      "tree": "e747348f7d3c9f1615963dde4f2c8baaf842415f",
      "parents": [
        "55c888d6d09a0df236adfaf8ccf06ff5d0646775"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 23 00:08:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:16 2005 -0700"
      },
      "message": "[PATCH] timers: introduce try_to_del_timer_sync()\n\nThis patch splits del_timer_sync() into 2 functions.  The new one,\ntry_to_del_timer_sync(), returns -1 when it hits executing timer.\n\nIt can be used in interrupt context, or when the caller hold locks which\ncan prevent completion of the timer\u0027s handler.\n\nNOTE.  Currently it can\u0027t be used in interrupt context in UP case, because\n-\u003erunning_timer is used only with CONFIG_SMP.\n\nShould the need arise, it is possible to kill #ifdef CONFIG_SMP in\nset_running_timer(), it is cheap.\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": "55c888d6d09a0df236adfaf8ccf06ff5d0646775",
      "tree": "deb9434abe3cf7c9b714ccb267ef5d943a847dfe",
      "parents": [
        "bdd646a44672115c986593956aa4ef105485a184"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 23 00:08:56 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:16 2005 -0700"
      },
      "message": "[PATCH] timers fixes/improvements\n\nThis patch tries to solve following problems:\n\n1. del_timer_sync() is racy. The timer can be fired again after\n   del_timer_sync have checked all cpus and before it will recheck\n   timer_pending().\n\n2. It has scalability problems. All cpus are scanned to determine\n   if the timer is running on that cpu.\n\n   With this patch del_timer_sync is O(1) and no slower than plain\n   del_timer(pending_timer), unless it has to actually wait for\n   completion of the currently running timer.\n\n   The only restriction is that the recurring timer should not use\n   add_timer_on().\n\n3. The timers are not serialized wrt to itself.\n\n   If CPU_0 does mod_timer(jiffies+1) while the timer is currently\n   running on CPU 1, it is quite possible that local interrupt on\n   CPU_0 will start that timer before it finished on CPU_1.\n\n4. The timers locking is suboptimal. __mod_timer() takes 3 locks\n   at once and still requires wmb() in del_timer/run_timers.\n\n   The new implementation takes 2 locks sequentially and does not\n   need memory barriers.\n\nCurrently -\u003ebase !\u003d NULL means that the timer is pending. In that case\n-\u003ebase.lock is used to lock the timer. __mod_timer also takes timer-\u003elock\nbecause -\u003ebase can be \u003d\u003d NULL.\n\nThis patch uses timer-\u003eentry.next !\u003d NULL as indication that the timer is\npending. So it does __list_del(), entry-\u003enext \u003d NULL instead of list_del()\nwhen the timer is deleted.\n\nThe -\u003ebase field is used for hashed locking only, it is initialized\nin init_timer() which sets -\u003ebase \u003d per_cpu(tvec_bases). When the\ntvec_bases.lock is locked, it means that all timers which are tied\nto this base via timer-\u003ebase are locked, and the base itself is locked\ntoo.\n\nSo __run_timers/migrate_timers can safely modify all timers which could\nbe found on -\u003etvX lists (pending timers).\n\nWhen the timer\u0027s base is locked, and the timer removed from -\u003eentry list\n(which means that _run_timers/migrate_timers can\u0027t see this timer), it is\npossible to set timer-\u003ebase \u003d NULL and drop the lock: the timer remains\nlocked.\n\nThis patch adds lock_timer_base() helper, which waits for -\u003ebase !\u003d NULL,\nlocks the -\u003ebase, and checks it is still the same.\n\n__mod_timer() schedules the timer on the local CPU and changes it\u0027s base.\nHowever, it does not lock both old and new bases at once. It locks the\ntimer via lock_timer_base(), deletes the timer, sets -\u003ebase \u003d NULL, and\nunlocks old base. Then __mod_timer() locks new_base, sets -\u003ebase \u003d new_base,\nand adds this timer. This simplifies the code, because AB-BA deadlock is not\npossible. __mod_timer() also ensures that the timer\u0027s base is not changed\nwhile the timer\u0027s handler is running on the old base.\n\n__run_timers(), del_timer() do not change -\u003ebase anymore, they only clear\npending flag.\n\nSo del_timer_sync() can test timer-\u003ebase-\u003erunning_timer \u003d\u003d timer to detect\nwhether it is running or not.\n\nWe don\u0027t need timer_list-\u003elock anymore, this patch kills it.\n\nWe also don\u0027t need barriers. del_timer() and __run_timers() used smp_wmb()\nbefore clearing timer\u0027s pending flag. It was needed because __mod_timer()\ndid not lock old_base if the timer is not pending, so __mod_timer()-\u003elist_add()\ncould race with del_timer()-\u003elist_del(). With this patch these functions are\nserialized through base-\u003elock.\n\nOne problem. TIMER_INITIALIZER can\u0027t use per_cpu(tvec_bases). So this patch\nadds global\n\n        struct timer_base_s {\n                spinlock_t lock;\n                struct timer_list *running_timer;\n        } __init_timer_base;\n\nwhich is used by TIMER_INITIALIZER. The corresponding fields in tvec_t_base_s\nstruct are replaced by struct timer_base_s t_base.\n\nIt is indeed ugly. But this can\u0027t have scalability problems. The global\n__init_timer_base.lock is used only when __mod_timer() is called for the first\ntime AND the timer was compile time initialized. After that the timer migrates\nto the local CPU.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Renaud Lienhart \u003crenaud.lienhart@free.fr\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d59dd4620fb8d6422555a9e2b82a707718e68327",
      "tree": "78205657d24efcaa3f8314064951ac3814ed95a7",
      "parents": [
        "0d8d4d42f2d00eb65262b49f4edd4cf7ef4eb6fc"
      ],
      "author": {
        "name": "akpm@osdl.org",
        "email": "akpm@osdl.org",
        "time": "Sun May 01 08:58:47 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sun May 01 08:58:47 2005 -0700"
      },
      "message": "[PATCH] use smp_mb/wmb/rmb where possible\n\nReplace a number of memory barriers with smp_ variants.  This means we won\u0027t\ntake the unnecessary hit on UP machines.\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\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"
    }
  ]
}
