)]}'
{
  "commit": "7c1e76897492d92b6a1c2d6892494d39ded9680c",
  "tree": "ea04e1be252e176fe5a665a28fd1c26a562cb1fa",
  "parents": [
    "d210baf53b699fc61aa891c177b71d7082d3b957"
  ],
  "author": {
    "name": "Venkatesh Pallipadi",
    "email": "venkatesh.pallipadi@intel.com",
    "time": "Wed Sep 03 21:36:50 2008 +0000"
  },
  "committer": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Fri Sep 05 11:11:51 2008 +0200"
  },
  "message": "clockevents: prevent clockevent event_handler ending up handler_noop\n\nThere is a ordering related problem with clockevents code, due to which\nclockevents_register_device() called after tickless/highres switch\nwill not work. The new clockevent ends up with clockevents_handle_noop as\nevent handler, resulting in no timer activity.\n\nThe problematic path seems to be\n\n* old device already has hrtimer_interrupt as the event_handler\n* new clockevent device registers with a higher rating\n* tick_check_new_device() is called\n  * clockevents_exchange_device() gets called\n    * old-\u003eevent_handler is set to clockevents_handle_noop\n  * tick_setup_device() is called for the new device\n    * which sets new-\u003eevent_handler using the old-\u003eevent_handler which is noop.\n\nChange the ordering so that new device inherits the proper handler.\n\nThis does not have any issue in normal case as most likely all the clockevent\ndevices are setup before the highres switch. But, can potentially be affecting\nsome corner case where HPET force detect happens after the highres switch.\nThis was a problem with HPET in MSI mode code that we have been experimenting\nwith.\n\nSigned-off-by: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nSigned-off-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c33b0dc28e4db5de75df8a2419c128d22c8e29d9",
      "old_mode": 33188,
      "old_path": "include/linux/clockchips.h",
      "new_id": "ed3a5d473e52b2282c0d09c2c25d406400dc7522",
      "new_mode": 33188,
      "new_path": "include/linux/clockchips.h"
    },
    {
      "type": "modify",
      "old_id": "3d1e3e1a19716e94cdad4116b1ca73242ac45f1e",
      "old_mode": 33188,
      "old_path": "kernel/time/clockevents.c",
      "new_id": "1876b526c7783db17d4dd5050a899e640670ef59",
      "new_mode": 33188,
      "new_path": "kernel/time/clockevents.c"
    },
    {
      "type": "modify",
      "old_id": "80c4336f4188409a077d3f4ae4dde727f856de55",
      "old_mode": 33188,
      "old_path": "kernel/time/tick-common.c",
      "new_id": "c4777193d56734d0276aa210ddbbad2e79c416c8",
      "new_mode": 33188,
      "new_path": "kernel/time/tick-common.c"
    }
  ]
}
