)]}'
{
  "log": [
    {
      "commit": "8cadd2831bf3abc94f4530e7fdbab7bb39b6b27d",
      "tree": "4027798914cc3213692a4865797898a5ae0a0b49",
      "parents": [
        "81f61484f16decba0fb68400fe0036b337b4cdc7"
      ],
      "author": {
        "name": "Jesse Barnes",
        "email": "jbarnes@virtuousgeek.org",
        "time": "Mon May 10 14:26:20 2010 -0700"
      },
      "committer": {
        "name": "Matthew Garrett",
        "email": "mjg@redhat.com",
        "time": "Tue Aug 03 09:48:45 2010 -0400"
      },
      "message": "timer: add on-stack deferrable timer interfaces\n\nIn some cases (for instance with kernel threads) it may be desireable to\nuse on-stack deferrable timers to get their power saving benefits.  Add\ninterfaces to support this for the IPS driver.\n\nSigned-off-by: Jesse Barnes \u003cjbarnes@virtuousgeek.org\u003e\nSigned-off-by: Matthew Garrett \u003cmjg@redhat.com\u003e\n"
    },
    {
      "commit": "3bbb9ec946428b96657126768f65487a48dd090c",
      "tree": "b560e8c15102281a110cd5ccd93866084e31014b",
      "parents": [
        "3d0205bd1383aa3cac93c209b7c7d03b27930195"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Thu Mar 11 14:04:36 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Apr 06 21:50:02 2010 +0200"
      },
      "message": "timers: Introduce the concept of timer slack for legacy timers\n\nWhile HR timers have had the concept of timer slack for quite some time\nnow, the legacy timers lacked this concept, and had to make do with\nround_jiffies() and friends.\n\nTimer slack is important for power management; grouping timers reduces the\nnumber of wakeups which in turn reduces power consumption.\n\nThis patch introduces timer slack to the legacy timers using the following\npieces:\n* A slack field in the timer struct\n* An api (set_timer_slack) that callers can use to set explicit timer slack\n* A default slack of 0.4% of the requested delay for callers that do not set\n  any explicit slack\n* Rounding code that is part of mod_timer() that tries to\n  group timers around jiffies values every \u0027power of two\u0027\n  (so quick timers will group around every 2, but longer timers\n  will group around every 4, 8, 16, 32 etc)\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: johnstul@us.ibm.com\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "e500011ffa191d662ac64d4ada6a5187b3180e16",
      "tree": "96a47b167b15c346ea4e04e94fc804e5ea370168",
      "parents": [
        "7285dd7fd375763bfb8ab1ac9cf3f1206f503c16"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Sun Aug 30 13:19:12 2009 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sun Aug 30 22:26:34 2009 +0200"
      },
      "message": "timers: Drop a function prototype\n\nDrop prototype for non-existent next_timer_interrupt() function.\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: akpm \u003cakpm@linux-foundation.org\u003e\nLKML-Reference: \u003c4A9ADEC0.70306@oracle.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n\n"
    },
    {
      "commit": "507e123151149e578c9aae33eb876c49824da5f8",
      "tree": "10b4c36a278553ed3814c0643442e7210a7a1a15",
      "parents": [
        "bfdb4d9f0f611687d71cf6a460efc9e755f4a462"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Tue Jun 23 17:38:15 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jun 24 11:15:09 2009 +0200"
      },
      "message": "timer stats: Optimize by adding quick check to avoid function calls\n\nWhen the kernel is configured with CONFIG_TIMER_STATS but timer\nstats are runtime disabled we still get calls to\n__timer_stats_timer_set_start_info which initializes some\nfields in the corresponding struct timer_list.\n\nSo add some quick checks in the the timer stats setup functions\nto avoid function calls to __timer_stats_timer_set_start_info\nwhen timer stats are disabled.\n\nIn an artificial workload that does nothing but playing ping\npong with a single tcp packet via loopback this decreases cpu\nconsumption by 1 - 1.5%.\n\nThis is part of a modified function trace output on SLES11:\n\n perl-2497  [00] 28630647177732388 [+  125]: sk_reset_timer \u003c-tcp_v4_rcv\n perl-2497  [00] 28630647177732513 [+  125]: mod_timer \u003c-sk_reset_timer\n perl-2497  [00] 28630647177732638 [+  125]: __timer_stats_timer_set_start_info \u003c-mod_timer\n perl-2497  [00] 28630647177732763 [+  125]: __mod_timer \u003c-mod_timer\n perl-2497  [00] 28630647177732888 [+  125]: __timer_stats_timer_set_start_info \u003c-__mod_timer\n perl-2497  [00] 28630647177733013 [+   93]: lock_timer_base \u003c-__mod_timer\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: Mustafa Mesanovic \u003cmustafa.mesanovic@de.ibm.com\u003e\nCc: Arjan van de Ven \u003carjan@infradead.org\u003e\nLKML-Reference: \u003c20090623153811.GA4641@osiris.boeblingen.de.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "597d0275736dad9c3bda6f0a00a1c477dc0f37b1",
      "tree": "7ebbe9f80fb13a3ec34ea997d00c21eecf7699ae",
      "parents": [
        "a04198887658e1d8ae25f5420035c057cb170e67"
      ],
      "author": {
        "name": "Arun R Bharadwaj",
        "email": "arun@linux.vnet.ibm.com",
        "time": "Thu Apr 16 12:13:26 2009 +0530"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed May 13 16:52:42 2009 +0200"
      },
      "message": "timers: Framework for identifying pinned timers\n\n* Arun R Bharadwaj \u003carun@linux.vnet.ibm.com\u003e [2009-04-16 12:11:36]:\n\nThis patch creates a new framework for identifying cpu-pinned timers\nand hrtimers.\n\nThis framework is needed because pinned timers are expected to fire on\nthe same CPU on which they are queued. So it is essential to identify\nthese and not migrate them, in case there are any.\n\nFor regular timers, the currently existing add_timer_on() can be used\nqueue pinned timers and subsequently mod_timer_pinned() can be used\nto modify the \u0027expires\u0027 field.\n\nFor hrtimers, new modes HRTIMER_ABS_PINNED and HRTIMER_REL_PINNED are\nadded to queue cpu-pinned hrtimer.\n\n[ tglx: use .._PINNED mode argument instead of creating tons of new\nfunctions ]\n\nSigned-off-by: Arun R Bharadwaj \u003carun@linux.vnet.ibm.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "c4e1aa67ed9e4e542a064bc271ddbf152b677e91",
      "tree": "2a2ca00bed0fc22b4eb83db092c9178868d8f76b",
      "parents": [
        "cf2f7d7c90279cdbc12429de278f3d27ac2050ae",
        "2f8501815256af8498904e68bd0984b1afffd6f8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 30 17:17:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Mar 30 17:17:35 2009 -0700"
      },
      "message": "Merge branch \u0027locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (33 commits)\n  lockdep: fix deadlock in lockdep_trace_alloc\n  lockdep: annotate reclaim context (__GFP_NOFS), fix SLOB\n  lockdep: annotate reclaim context (__GFP_NOFS), fix\n  lockdep: build fix for !PROVE_LOCKING\n  lockstat: warn about disabled lock debugging\n  lockdep: use stringify.h\n  lockdep: simplify check_prev_add_irq()\n  lockdep: get_user_chars() redo\n  lockdep: simplify get_user_chars()\n  lockdep: add comments to mark_lock_irq()\n  lockdep: remove macro usage from mark_held_locks()\n  lockdep: fully reduce mark_lock_irq()\n  lockdep: merge the !_READ mark_lock_irq() helpers\n  lockdep: merge the _READ mark_lock_irq() helpers\n  lockdep: simplify mark_lock_irq() helpers #3\n  lockdep: further simplify mark_lock_irq() helpers\n  lockdep: simplify the mark_lock_irq() helpers\n  lockdep: split up mark_lock_irq()\n  lockdep: generate usage strings\n  lockdep: generate the state bit definitions\n  ...\n"
    },
    {
      "commit": "74019224ac34b044b44a31dd89a54e3477db4896",
      "tree": "bf7b04319c0c4329eb6cef0788737c14d2fa9030",
      "parents": [
        "5955c7a2cfb6a35429adea5dc480002b15ca8cfc"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 18 12:23:29 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 18 19:26:33 2009 +0100"
      },
      "message": "timers: add mod_timer_pending()\n\nImpact: new timer API\n\nBased on an idea from Martin Josefsson with the help of\nPatrick McHardy and Stephen Hemminger:\n\nintroduce the mod_timer_pending() API which is a mod_timer()\noffspring that is an invariant on already removed timers.\n\n(regular mod_timer() re-activates non-pending timers.)\n\nThis is useful for the networking code in that it can\nallow unserialized mod_timer_pending() timer-forwarding\ncalls, but a single del_timer*() will stop the timer\nfrom being reactivated again.\n\nAlso while at it:\n\n- optimize the regular mod_timer() path some more, the\n  timer-stat and a debug check was needlessly duplicated\n  in __mod_timer().\n\n- make the exports come straight after the function, as\n  most other exports in timer.c already did.\n\n- eliminate __mod_timer() as an external API, change the\n  users to mod_timer().\n\nThe regular mod_timer() code path is not impacted\nsignificantly, due to inlining optimizations and due to\nthe simplifications.\n\nBased-on-patch-from: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nAcked-by: Stephen Hemminger \u003cshemminger@vyatta.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Patrick McHardy \u003ckaber@trash.net\u003e\nCc: netdev@vger.kernel.org\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "6f2b9b9a9d750a9175dc79c74bfed5add840983c",
      "tree": "176fda4698f3ee6dfa4f35febe9fb959f584d353",
      "parents": [
        "673f8205914a12e928c65afbcd78ae748f78df53"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Thu Jan 29 16:03:20 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Feb 14 23:25:52 2009 +0100"
      },
      "message": "timer: implement lockdep deadlock detection\n\nThis modifies the timer code in a way to allow lockdep to detect\ndeadlocks resulting from a lock being taken in the timer function\nas well as around the del_timer_sync() call.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\n"
    },
    {
      "commit": "9c133c469d38043d5aadaa03f2fb840d88d1cf4f",
      "tree": "c9af63f0c25efc7454fc3f46b362c80056977341",
      "parents": [
        "89f97496e81d2112b5e41416fe3020688c443818"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Thu Nov 06 08:42:48 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Nov 06 08:42:48 2008 +0100"
      },
      "message": "Add round_jiffies_up and related routines\n\nThis patch (as1158b) adds round_jiffies_up() and friends.  These\nroutines work like the analogous round_jiffies() functions, except\nthat they will never round down.\n\nThe new routines will be useful for timeouts where we don\u0027t care\nexactly when the timer expires, provided it doesn\u0027t expire too soon.\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "c6f3a97f86a5c97be0ca255976110bb9c3cfe669",
      "tree": "95a7bf3c928a85b26aed128786fc09e18bc5dcfc",
      "parents": [
        "691cc54c7d28542434d2b3ee4ddbad6a99312dec"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Apr 30 00:55:03 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:53 2008 -0700"
      },
      "message": "debugobjects: add timer specific object debugging code\n\nAdd calls to the generic object debugging infrastructure and provide fixup\nfunctions which allow to keep the system alive when recoverable problems have\nbeen detected by the object debugging core code.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6d141c3ff6d74cc30cdbf26155842756ac16cf7f",
      "tree": "55c20a99ba64aa48ebc17d1df61e9c7e7a5dd0cc",
      "parents": [
        "ae161068756c203ccbeeb9178f4d4f6665d294cf"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Fri Feb 08 04:21:09 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 08 09:22:37 2008 -0800"
      },
      "message": "workqueue: make delayed_work_timer_fn() static\n\ndelayed_work_timer_fn() is a timer function, make it static.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ec7015840ad7a8cdc87f52367ffe9c0b0401d919",
      "tree": "4d0d7dc6f4ab1e364521a866e0150794d9739a28",
      "parents": [
        "9f741cb8fecef923cce1dff820ac6aa78c12d136"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Fri Feb 08 04:19:55 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 08 09:22:31 2008 -0800"
      },
      "message": "Remove fastcall from linux/include\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a6fa8e5a6172a5a5bc06ed04f34e50b36c978127",
      "tree": "ec7750ea6438f85e2a1a94722962c7dbc3767100",
      "parents": [
        "213eca7f4888e9817e8076cdab6b9f7295c181f6"
      ],
      "author": {
        "name": "Pavel Machek",
        "email": "pavel@ucw.cz",
        "time": "Wed Jan 30 13:30:00 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jan 30 13:30:00 2008 +0100"
      },
      "message": "time: clean hungarian notation from timers\n\nClean up hungarian notation from timer code.\n\nSigned-off-by: Pavel Machek \u003cpavel@suse.cz\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "c5c061b8f9726bc2c25e19dec227933a13d1e6b7",
      "tree": "e99f68f70df1a01dd383007895befd114a1da8c4",
      "parents": [
        "e0807061908a7a9441d0f745deb444f7216904cb"
      ],
      "author": {
        "name": "Venki Pallipadi",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Sun Jul 15 23:40:30 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:45 2007 -0700"
      },
      "message": "Add a flag to indicate deferrable timers in /proc/timer_stats\n\nAdd a flag in /proc/timer_stats to indicate deferrable timers.  This will\nlet developers/users to differentiate between types of tiemrs in\n/proc/timer_stats.\n\nDeferrable timer and normal timer will appear in /proc/timer_stats as below.\n  10D,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n   10,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n\nAlso version of timer_stats changes from v0.1 to v0.2\n\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@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": "0a3021f4e249fbdb5f30d614707b5e02022e4c9b",
      "tree": "c01b80fa03dbb4a853b46f182864384736a54088",
      "parents": [
        "9aacd599342fdfc1fb9422f37e900609b7a46249"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Sun Jul 15 23:39:57 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:42 2007 -0700"
      },
      "message": "Remove unnecessary includes of spinlock.h under include/linux\n\nRemove the obviously unnecessary includes of \u003clinux/spinlock.h\u003e under the\ninclude/linux/ directory, and fix the couple errors that are introduced as\na result of that.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eaad084bb0f3a6259e56400cd45d061dbf040600",
      "tree": "34a5f5c3e1a849b035510ee28d5aaffd42a36dcc",
      "parents": [
        "6e98ee75c3ab99db48ecc0615c2246dc193111a9"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue May 29 23:47:39 2007 +0200"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 29 18:11:10 2007 -0700"
      },
      "message": "NOHZ: prevent multiplication overflow - stop timer for huge timeouts\n\nget_next_timer_interrupt() returns a delta of (LONG_MAX \u003e 1) in case\nthere is no timer pending. On 64 bit machines this results in a\nmultiplication overflow in tick_nohz_stop_sched_tick().\n\nReported by: Dave Miller \u003cdavem@davemloft.net\u003e\n\nMake the return value a constant and limit the return value to a 32 bit\nvalue.\n\nWhen the max timeout value is returned, we can safely stop the tick\ntimer device. The max jiffies delta results in a 12 days timeout for\nHZ\u003d1000.\n\nIn the long term the get_next_timer_interrupt() code needs to be\nreworked to return ktime instead of jiffies, but we have to wait until\nthe last users of the original NO_IDLE_HZ code are converted.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6e453a67510a17f01b63835f18569e8c3939a38c",
      "tree": "2cbc50f434cf4397d2f279480ea2c2a87defa9b0",
      "parents": [
        "da6752964290567a6b4ea180d1becda75e810e87"
      ],
      "author": {
        "name": "Venki Pallipadi",
        "email": "venkatesh.pallipadi@intel.com",
        "time": "Tue May 08 00:27:44 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:05 2007 -0700"
      },
      "message": "Add support for deferrable timers\n\nIntroduce a new flag for timers - deferrable: Timers that work normally\nwhen system is busy.  But, will not cause CPU to come out of idle (just to\nservice this timer), when CPU is idle.  Instead, this timer will be\nserviced when CPU eventually wakes up with a subsequent non-deferrable\ntimer.\n\nThe main advantage of this is to avoid unnecessary timer interrupts when\nCPU is idle.  If the routine currently called by a timer can wait until\nnext event without any issues, this new timer can be used to setup timer\nevent for that routine.  This, with dynticks, allows CPUs to be lazy,\nallowing them to stay in idle for extended period of time by reducing\nunnecesary wakeup and thereby reducing the power consumption.\n\nThis patch:\n\nBuilds this new timer on top of existing timer infrastructure.  It uses\nlast bit in \u0027base\u0027 pointer of timer_list structure to store this deferrable\ntimer flag.  __next_timer_interrupt() function skips over these deferrable\ntimers when CPU looks for next timer event for which it has to wake up.\n\nThis is exported by a new interface init_timer_deferrable() that can be\ncalled in place of regular init_timer().\n\n[akpm@linux-foundation.org: Privatise a #define]\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Dave Jones \u003cdavej@codemonkey.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "82f67cd9fca8c8762c15ba7ed0d5747588c1e221",
      "tree": "1ff7e5cc496580b85bb42fb1d7b19dcbef7b7776",
      "parents": [
        "8bfd9a7a229b5f3d3eda5d7d45c2eebec5b4ba16"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Feb 16 01:28:13 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:13:59 2007 -0800"
      },
      "message": "[PATCH] Add debugging feature /proc/timer_stat\n\nAdd /proc/timer_stats support: debugging feature to profile timer expiration.\nBoth the starting site, process/PID and the expiration function is captured.\nThis allows the quick identification of timer event sources in a system.\n\nSample output:\n\n# echo 1 \u003e /proc/timer_stats\n# cat /proc/timer_stats\nTimer Stats Version: v0.1\nSample period: 4.010 s\n  24,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)\n  11,     0 swapper          sk_reset_timer (tcp_delack_timer)\n   6,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick)\n   2,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n  17,     0 swapper          hrtimer_restart_sched_tick (hrtimer_sched_tick)\n   2,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn)\n   4,  2050 pcscd            do_nanosleep (hrtimer_wakeup)\n   5,  4179 sshd             sk_reset_timer (tcp_write_timer)\n   4,  2248 yum-updatesd     schedule_timeout (process_timeout)\n  18,     0 swapper          hrtimer_restart_sched_tick (hrtimer_sched_tick)\n   3,     0 swapper          sk_reset_timer (tcp_delack_timer)\n   1,     1 swapper          neigh_table_init_no_netlink (neigh_periodic_timer)\n   2,     1 swapper          e1000_up (e1000_watchdog)\n   1,     1 init             schedule_timeout (process_timeout)\n100 total events, 25.24 events/sec\n\n[ cleanups and hrtimers support from Thomas Gleixner \u003ctglx@linutronix.de\u003e ]\n[bunk@stusta.de: nr_entries can become static]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c9cb2e3d7c9178ab75d0942f96abb3abe0369906",
      "tree": "2d4a5470ece5efe82463653678c491c2f249d560",
      "parents": [
        "fd064b9b7770d5c7705bf9542950c7bd81c30f98"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Feb 16 01:27:49 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:13:58 2007 -0800"
      },
      "message": "[PATCH] hrtimers: namespace and enum cleanup\n\n- hrtimers did not use the hrtimer_restart enum and relied on the implict\n  int representation. Fix the prototypes and the functions using the enums.\n- Use seperate name spaces for the enumerations\n- Convert hrtimer_restart macro to inline function\n- Add comments\n\nNo functional changes.\n\n[akpm@osdl.org: fix input driver]\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Dmitry Torokhov \u003cdtor@mail.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fd064b9b7770d5c7705bf9542950c7bd81c30f98",
      "tree": "8b14c81f983e49b5553fd6764139bffb1d4f1648",
      "parents": [
        "1cfd68496e53f7be09a3c1358d1d389004217541"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Feb 16 01:27:47 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:13:58 2007 -0800"
      },
      "message": "[PATCH] Extend next_timer_interrupt() to use a reference jiffie\n\nFor CONFIG_NO_HZ we need to calculate the next timer wheel event based on a\ngiven jiffie value.  Extend the existing code to allow the extra \u0027now\u0027\nargument.  Provide a compability function for the existing implementations to\ncall the function with now \u003d\u003d jiffies.  (This also solves the racyness of the\noriginal code vs.  jiffies changing during the iteration.)\n\nNo functional changes to existing users of this infrastructure.\n\n[ remove WARN_ON() that triggered on s390, by Carsten Otte \u003ccotte@de.ibm.com\u003e ]\n[ made new helper static, Adrian Bunk \u003cbunk@stusta.de\u003e ]\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45f8bde0d0d6deb168b45998c72b4fbeb2f57efb",
      "tree": "69ffee8cc05f3ffaa437412f55832f7276125e8b",
      "parents": [
        "a8d814b5dd7a1bc5c19ae32d35b8bd4d8a510eae"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Fri Jan 26 00:57:09 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Jan 26 13:51:00 2007 -0800"
      },
      "message": "[PATCH] fix various kernel-doc in header files\n\nFix a number of kernel-doc entries for header files in include/linux by\nmaking sure they begin with the appropriate \u0027/**\u0027 notation and use @var\nnotation.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4c36a5dec25fb344ad76b11860da3a8b50bd1248",
      "tree": "facfe4ad3bb3638d8ee6f6b3e7fc75a0a02e304a",
      "parents": [
        "5466b456ed6748e0bfe02831e570004d4c04c1d7"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Sun Dec 10 02:21:24 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sun Dec 10 09:57:22 2006 -0800"
      },
      "message": "[PATCH] round_jiffies infrastructure\n\nIntroduce a round_jiffies() function as well as a round_jiffies_relative()\nfunction.  These functions round a jiffies value to the next whole second.\nThe primary purpose of this rounding is to cause all \"we don\u0027t care exactly\nwhen\" timers to happen at the same jiffy.\n\nThis avoids multiple timers firing within the second for no real reason;\nwith dynamic ticks these extra timers cause wakeups from deep sleep CPU\nsleep states and thus waste power.\n\nThe exact wakeup moment is skewed by the cpu number, to avoid all cpus from\nwaking up at the exact same time (and hitting the same lock/cachelines\nthere)\n\n[akpm@osdl.org: fix variable type]\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: 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": "62c4f0a2d5a188f73a94f2cb8ea0dba3e7cf0a7f",
      "tree": "e85ca2d0dd43f90dccf758338764c3caa55f333f",
      "parents": [
        "089f26d5e31b7bf42a9a8fefec08b30cd27f4b0e"
      ],
      "author": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "committer": {
        "name": "David Woodhouse",
        "email": "dwmw2@infradead.org",
        "time": "Wed Apr 26 12:56:16 2006 +0100"
      },
      "message": "Don\u0027t include linux/config.h from anywhere else in include/\n\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\n"
    },
    {
      "commit": "3691c5199e8a4be1c7a91b5ab925db5feb866e19",
      "tree": "025210545818b080df13faa31c9266432579794c",
      "parents": [
        "5ce29646ebe352587e3b3160d599010c5da1b9dd"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Fri Mar 31 02:30:30 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 31 12:18:52 2006 -0800"
      },
      "message": "[PATCH] kill __init_timer_base in favor of boot_tvec_bases\n\nCommit a4a6198b80cf82eb8160603c98da218d1bd5e104:\n\t[PATCH] tvec_bases too large for per-cpu data\n\nintroduced \"struct tvec_t_base_s boot_tvec_bases\" which is visible at\ncompile time.  This means we can kill __init_timer_base and move\ntimer_base_s\u0027s content into tvec_t_base_s.\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": "05cfb614ddbf3181540ce09d44d96486f8ba8d6a",
      "tree": "aafed98638557a4643141d906fbb2406f0764a94",
      "parents": [
        "df869b630d9d9131c10cf073fb61646048874b2f"
      ],
      "author": {
        "name": "Roman Zippel",
        "email": "zippel@linux-m68k.org",
        "time": "Sun Mar 26 01:38:12 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Mar 26 08:57:03 2006 -0800"
      },
      "message": "[PATCH] hrtimers: remove data field\n\nThe nanosleep cleanup allows to remove the data field of hrtimer.  The\ncallback function can use container_of() to get it\u0027s own data.  Since the\nhrtimer structure is anyway embedded in other structures, this adds no\noverhead.\n\nSigned-off-by: Roman Zippel \u003czippel@linux-m68k.org\u003e\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": "13fce8062968996da496d4f65cc1c1f845704604",
      "tree": "fa8f3e8ee813397d043efd81780c487531705aa1",
      "parents": [
        "53813158012f4d9272e5ccdc005671e780a39931"
      ],
      "author": {
        "name": "Andrzej Zaborowski",
        "email": "balrogg@gmail.com",
        "time": "Fri Mar 24 18:13:37 2006 +0100"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Mar 24 18:13:37 2006 +0100"
      },
      "message": "Fix simple typos\n\nThis corrects some trivial errors in ARM docs and comments,\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "2ff678b8da6478d861c1b0ecb3ac14575760e906",
      "tree": "0ca983ce820ac8bb9f6e8b193926e0804116a7e0",
      "parents": [
        "df78488de7befd387e9d060da6e18bb5d1cb882c"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:34 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:38 2006 -0800"
      },
      "message": "[PATCH] hrtimer: switch itimers to hrtimer\n\nswitch itimers to a hrtimers-based implementation\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": "15d2bace5ec907530a3d0e0cf4bb1bd29f3ad7b7",
      "tree": "52434f3ad069dadb6e70461888c2a068c44a9738",
      "parents": [
        "2ca7d93bb27876e5fd4ebfcb3b00627107bdad4d"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Sun Oct 30 15:02:24 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:21 2005 -0800"
      },
      "message": "[PATCH] add_timer() of a pending timer is illegal\n\nIn the recent timer rework we lost the check for an add_timer() of an\nalready-pending timer.  That check was useful for networking, so put it back.\n\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": "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": "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": "8d06afab73a75f40ae2864e6c296356bab1ab473",
      "tree": "1d9c8c24a1024a12a4e8df841fba5809fa914356",
      "parents": [
        "7c352bdf048811b8128019ffc1e886161e09c11c"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Sep 09 13:10:40 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 09 14:03:48 2005 -0700"
      },
      "message": "[PATCH] timer initialization cleanup: DEFINE_TIMER\n\nClean up timer initialization by introducing DEFINE_TIMER a\u0027la\nDEFINE_SPINLOCK.  Build and boot-tested on x86.  A similar patch has been\nbeen in the -RT tree for some time.\n\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": "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": "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"
    }
  ]
}
