)]}'
{
  "commit": "ce31332d3c77532d6ea97ddcb475a2b02dd358b4",
  "tree": "273c3664420d8fbd08346d9298c5010640ca3f71",
  "parents": [
    "f945a3d9600633de589ce698233b34ff6ad57e55"
  ],
  "author": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Fri Apr 29 00:02:00 2011 +0200"
  },
  "committer": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Fri Apr 29 10:57:11 2011 +0200"
  },
  "message": "hrtimer: Initialize CLOCK_ID to HRTIMER_BASE table statically\n\nSedat and Bruno reported RCU stalls which turned out to be caused by\nthe following;\n\nsched_init() calls init_rt_bandwidth() which calls hrtimer_init()\n_BEFORE_ hrtimers_init() is called. While not entirely correct this\nworked because hrtimer_init() only accessed statically initialized\ndata (hrtimer_bases.clock_base[CLOCK_MONOTONIC])\n\nCommit e06383db9 (hrtimers: extend hrtimer base code to handle more\nthen 2 clockids) added an indirection to the hrtimer_bases.clock_base\nlookup to avoid gap handling in the hot path. The table which is used\nfor the translataion from CLOCK_ID to HRTIMER_BASE index is\ninitialized at runtime in hrtimers_init(). So the early call of the\nscheduler code translates CLOCK_MONOTONIC to HRTIMER_BASE_REALTIME.\n\nThus the rt_bandwith timer ends up on CLOCK_REALTIME. If the timer is\narmed and the wall clock time is set (e.g. ntpdate in the early boot\nprocess - which also gives the problem deterministic behaviour\ni.e. magic recovery after N hours), then the timer ends up with an\nexpiry time far into the future. That breaks the RT throttler\nmechanism as rt runtime is accumulated and never cleared, so the rt\nthrottler detects a false cpu hog condition and blocks all RT tasks\nuntil the timer finally expires. That in turn stalls the RCU thread of\nTINYRCU which leads to an huge amount of RCU callbacks piling up.\n\nMake the translation table statically initialized, so we are back to\nthe status of \u003c\u003d 2.6.39.\n\nReported-and-tested-by: Sedat Dilek \u003csedat.dilek@gmail.com\u003e\nReported-by: Bruno Prémont \u003cbonbons@linux-vserver.org\u003e\nCc: John stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nLink: http://lkml.kernel.org/r/%3Calpine.LFD.2.02.1104282353140.3005%40ionos%3E\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9017478c5d4c3f224cde995518976ed8d88d79d5",
      "old_mode": 33188,
      "old_path": "kernel/hrtimer.c",
      "new_id": "87fdb3f8db14c50e6238a68267834169ce6b6300",
      "new_mode": 33188,
      "new_path": "kernel/hrtimer.c"
    }
  ]
}
