)]}'
{
  "commit": "d65670a78cdbfae94f20a9e05ec705871d7cdf2b",
  "tree": "3c16dedb75fa5ab6c0fdc072cc8d73df01d43a17",
  "parents": [
    "e35f95b36e43f67a6f806172555a152c11ea0a78"
  ],
  "author": {
    "name": "John Stultz",
    "email": "john.stultz@linaro.org",
    "time": "Mon Oct 31 17:06:35 2011 -0400"
  },
  "committer": {
    "name": "John Stultz",
    "email": "john.stultz@linaro.org",
    "time": "Thu Nov 10 11:27:08 2011 -0800"
  },
  "message": "clocksource: Avoid selecting mult values that might overflow when adjusted\n\nFor some frequencies, the clocks_calc_mult_shift() function will\nunfortunately select mult values very close to 0xffffffff.  This\nhas the potential to overflow when NTP adjusts the clock, adding\nto the mult value.\n\nThis patch adds a clocksource.maxadj value, which provides\nan approximation of an 11% adjustment(NTP limits adjustments to\n500ppm and the tick adjustment is limited to 10%), which could\nbe made to the clocksource.mult value. This is then used to both\ncheck that the current mult value won\u0027t overflow/underflow, as\nwell as warning us if the timekeeping_adjust() code pushes over\nthat 11% boundary.\n\nv2: Fix max_adjustment calculation, and improve WARN_ONCE\nmessages.\n\nv3: Don\u0027t warn before maxadj has actually been set\n\nCC: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nCC: David Daney \u003cddaney.cavm@gmail.com\u003e\nCC: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCC: Chen Jie \u003cchenj@lemote.com\u003e\nCC: zhangfx \u003czhangfx@lemote.com\u003e\nCC: stable@kernel.org\nReported-by: Chen Jie \u003cchenj@lemote.com\u003e\nReported-by: zhangfx \u003czhangfx@lemote.com\u003e\nTested-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nSigned-off-by: John Stultz \u003cjohn.stultz@linaro.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "139c4db55f1736eebc35cc4601ee98d0d10a40c7",
      "old_mode": 33188,
      "old_path": "include/linux/clocksource.h",
      "new_id": "c86c940d1de3a58b73fd4027b80524daca997478",
      "new_mode": 33188,
      "new_path": "include/linux/clocksource.h"
    },
    {
      "type": "modify",
      "old_id": "cf52fda2e0966d005e152ff8747d5d44db5fbd7a",
      "old_mode": 33188,
      "old_path": "kernel/time/clocksource.c",
      "new_id": "cfc65e1eb9fbba411fad95fabee1b78f0e6517f3",
      "new_mode": 33188,
      "new_path": "kernel/time/clocksource.c"
    },
    {
      "type": "modify",
      "old_id": "2b021b0e8507e7e4f9951780c88877bb2d4d56bd",
      "old_mode": 33188,
      "old_path": "kernel/time/timekeeping.c",
      "new_id": "e65ff3171102841aea46250576bb8eb64023169f",
      "new_mode": 33188,
      "new_path": "kernel/time/timekeeping.c"
    }
  ]
}
