)]}'
{
  "commit": "4cfafd3082afc707653aeb82e9f8e7b596fbbfd6",
  "tree": "8c3abec0535288f2b27bbae7bcedda5a458a6aba",
  "parents": [
    "c78c881824cc3354c0518c0d21febe04ffc69638"
  ],
  "author": {
    "name": "Peter Zijlstra",
    "email": "peterz@infradead.org",
    "time": "Thu May 14 12:23:11 2015 +0200"
  },
  "committer": {
    "name": "Thomas Gleixner",
    "email": "tglx@linutronix.de",
    "time": "Mon May 18 17:17:42 2015 +0200"
  },
  "message": "sched,perf: Fix periodic timers\n\nIn the below two commits (see Fixes) we have periodic timers that can\nstop themselves when they\u0027re no longer required, but need to be\n(re)-started when their idle condition changes.\n\nFurther complications is that we want the timer handler to always do\nthe forward such that it will always correctly deal with the overruns,\nand we do not want to race such that the handler has already decided\nto stop, but the (external) restart sees the timer still active and we\nend up with a \u0027lost\u0027 timer.\n\nThe problem with the current code is that the re-start can come before\nthe callback does the forward, at which point the forward from the\ncallback will WARN about forwarding an enqueued timer.\n\nNow, conceptually its easy to detect if you\u0027re before or after the fwd\nby comparing the expiration time against the current time. Of course,\nthat\u0027s expensive (and racy) because we don\u0027t have the current time.\n\nAlternatively one could cache this state inside the timer, but then\neverybody pays the overhead of maintaining this extra state, and that\nis undesired.\n\nThe only other option that I could see is the external timer_active\nvariable, which I tried to kill before. I would love a nicer interface\nfor this seemingly simple \u0027problem\u0027 but alas.\n\nFixes: 272325c4821f (\"perf: Fix mux_interval hrtimer wreckage\")\nFixes: 77a4d1a1b9a1 (\"sched: Cleanup bandwidth timers\")\nCc: pjt@google.com\nCc: tglx@linutronix.de\nCc: klamm@yandex-team.ru\nCc: mingo@kernel.org\nCc: bsegall@google.com\nCc: hpa@zytor.com\nCc: Sasha Levin \u003csasha.levin@oracle.com\u003e\nSigned-off-by: Peter Zijlstra (Intel) \u003cpeterz@infradead.org\u003e\nLink: http://lkml.kernel.org/r/20150514102311.GX21418@twins.programming.kicks-ass.net\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "61992cf2e9771699ee06595c8fbb1bd39633018a",
      "old_mode": 33188,
      "old_path": "include/linux/perf_event.h",
      "new_id": "cf3342a8ad807c7583d0b2ea1a72bc34735f3e5b",
      "new_mode": 33188,
      "new_path": "include/linux/perf_event.h"
    },
    {
      "type": "modify",
      "old_id": "f5288293d667a255b3aaf992e76df816b0f8c1ac",
      "old_mode": 33188,
      "old_path": "kernel/events/core.c",
      "new_id": "d9c93f36e379e3facc9dccb0339bcbd510c6db51",
      "new_mode": 33188,
      "new_path": "kernel/events/core.c"
    },
    {
      "type": "modify",
      "old_id": "d8a6196465d5d928bd0441012e5a223abef4e7dc",
      "old_mode": 33188,
      "old_path": "kernel/sched/core.c",
      "new_id": "e84aeb280777e422c3db39af4cc8b0ae28f4639a",
      "new_mode": 33188,
      "new_path": "kernel/sched/core.c"
    },
    {
      "type": "modify",
      "old_id": "e3b32ebfe421109066c2b5ea26ad292ec8945e23",
      "old_mode": 33188,
      "old_path": "kernel/sched/fair.c",
      "new_id": "69be2825262d5df3e4d859e3faabefe3064863e2",
      "new_mode": 33188,
      "new_path": "kernel/sched/fair.c"
    },
    {
      "type": "modify",
      "old_id": "b0febf25d8f18bff3da7c89f5139c7ec8bcee08b",
      "old_mode": 33188,
      "old_path": "kernel/sched/rt.c",
      "new_id": "e43da5391dcdd785ed39d335f3d8056889924d87",
      "new_mode": 33188,
      "new_path": "kernel/sched/rt.c"
    },
    {
      "type": "modify",
      "old_id": "08606a1f8c4db2996beb751fc30a6ad35a183af0",
      "old_mode": 33188,
      "old_path": "kernel/sched/sched.h",
      "new_id": "f9a58ef373b4b2240f521882d0b0d29da71d58b7",
      "new_mode": 33188,
      "new_path": "kernel/sched/sched.h"
    }
  ]
}
