)]}'
{
  "commit": "3f5087a2bae5d1ce10a3d698dec8f879a96f5419",
  "tree": "ad28e2dd5d36e7ea435032dd8a5fbd94340342ca",
  "parents": [
    "126e01bf92dfc5f0ba91e88be02c473e1506d7d9"
  ],
  "author": {
    "name": "Peter Zijlstra",
    "email": "a.p.zijlstra@chello.nl",
    "time": "Fri Apr 25 00:25:08 2008 +0200"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Fri Apr 25 00:25:08 2008 +0200"
  },
  "message": "sched: fix share (re)distribution\n\nfix __aggregate_redistribute_shares() related lockup reported by\nDavid S. Miller.\n\nThe problem this code tries to solve is \u0027accurately\u0027 calculating the \u0027fair\u0027\nshare of the group weight for each cpu. The current code falls back to a global\ngroup rebalance in case the sched_domain\u0027s span it looks at has no shares, but\ndoes have tasks.\n\nThe reason it gets stuck here, is because its inherently racy - if someone\nsteals the last task after we compute the agg-\u003erq_weight, but before we\nrebalance, we\u0027ll never get out of the loop.\n\nWe could of course go fix that, but while looking at this issue I found that\nthis \u0027fallback\u0027 wasn\u0027t nearly as rare as I\u0027d hoped it to be. In fact its quite\ncommon - and given it walks the whole machine, thats very bad.\n\nThe new approach is simple (why didn\u0027t I think of it before?), we set the\naggregate shares to the full task group weight, and each larger sched domain\nthat encounters an aggregate shares larger than the weight, clips it (it\nalready re-distributes anyway).\n\nThis nicely converges to the desired global picture where the sum of all\nshares equals the task group weight.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0014b03adaca0af7d09d25d3b5c0df3c007b2462",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "85e1721594f0e8e33f536bb87a485662ab4ac3c7",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    }
  ]
}
