)]}'
{
  "commit": "581931395e77326bb76d7648be080ce302244dd5",
  "tree": "0d9e4cd321745a148ebf20851fe8841ea17d9f27",
  "parents": [
    "d28393e27504ac1e06f4d374da321a94d89110a8"
  ],
  "author": {
    "name": "Steven Rostedt (Google)",
    "email": "rostedt@goodmis.org",
    "time": "Wed Oct 26 17:44:51 2022 -0400"
  },
  "committer": {
    "name": "Steven Rostedt (Google)",
    "email": "rostedt@goodmis.org",
    "time": "Thu Oct 27 10:50:48 2022 -0400"
  },
  "message": "timers: Expand DEBUG_OBJECTS_TIMER to check if it ever was used\n\nThere\u0027s been too many bugs happening where a timer is removed, either by\ndel_timer() or even del_timer_sync() but get\u0027s re-armed again by a\nworkqueue or some other task. Then the timer is freed while it\u0027s still\nqueued to go off. When the timer eventually goes off, as its content no\nlonger exists, it causes a crash in the timer code.\n\nThis is very hard to debug because all evidence of who added the timer is\ngone.\n\nCurrently, DEBUG_OBJECTS_TIMER will trigger if this happens, but as this\nonly happens rarely (but in the field, thousands of times) and may depend\non performing various tasks (USB unplug, CPU hotplug, suspend and resume),\nnot to mention that enabling DEBUG_OBJECTS_TIMER has too much overhead to\nrun in the field, it seldom catches these types of bugs.\n\nNow that del_timer_shutdown() is to be called before freeing, move the\nchecks of DEBUG_OBJECTS_TIMER to if it ever gets armed to where\ndel_timer_shutdown() is called. If there\u0027s a case where a timer is armed,\nand then freed without calling del_timer_shutdown() DEBUG_OBJECTS_TIMER\nwill now trigger on it.\n\nThis catches cases that are potential issues instead of just catching\nwhen the race condition occurs.\n\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: John Stultz \u003cjstultz@google.com\u003e\nCc: Stephen Boyd \u003csboyd@kernel.org\u003e\nSigned-off-by: Steven Rostedt (Google) \u003crostedt@goodmis.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "daccfe33da421474531ca44e9d7778bbee531bdd",
      "old_mode": 33188,
      "old_path": "include/linux/timer.h",
      "new_id": "d4d90149d0157e88d82b078d30e931a7f7de41d0",
      "new_mode": 33188,
      "new_path": "include/linux/timer.h"
    },
    {
      "type": "modify",
      "old_id": "111a3550b3f28f56dcf16a85dd8722b3f7e25f87",
      "old_mode": 33188,
      "old_path": "kernel/time/timer.c",
      "new_id": "1d17552b3edebd06e39778e2b377bdcdd6afc329",
      "new_mode": 33188,
      "new_path": "kernel/time/timer.c"
    }
  ]
}
