)]}'
{
  "commit": "4aeddaa133df7c0b7795b7774d2222efedc3aa12",
  "tree": "453ebe892664fec0d231269962db1e2f0a706bd0",
  "parents": [
    "1d719106061cc0177eb16d6d5ac914c0485772b2"
  ],
  "author": {
    "name": "Dennis Zhou",
    "email": "dennis@kernel.org",
    "time": "Fri Dec 29 22:24:40 2023 -0800"
  },
  "committer": {
    "name": "Dennis Zhou",
    "email": "dennis@kernel.org",
    "time": "Fri Dec 29 23:43:04 2023 -0800"
  },
  "message": "cpu/hotplug: Get rid of cpu_dying_mask\n\nThe cpu_dying_mask is not only undocumented but also to some extent a\nmisnomer. It\u0027s purpose is to capture the last direction of a cpu_up() or\ncpu_down() operation taking eventual rollback operations into account.  The\nname and the lack of documentation lured already someone to use it in the\nwrong way.\n\nThe initial user is the scheduler code which needs to keep the decision\ncorrect whether to schedule tasks on a CPU, which is between the\nCPUHP_ONLINE and the CPUHP_ACTIVE state and has the balance_push() hook\ninstalled.\n\ncpu_dying mask is not really useful for general consumption. The\ncpu_dying_mask bits are sticky even after cpu_up() or cpu_down()\ncompletes.\n\nIt might be argued, that the cpu_dying_mask bit could be cleared when\ncpu_down() completes, but that\u0027s not possible under all circumstances.\n\nEspecially not with partial hotplug operations. In that case the bit must\nbe sticky in order to keep the initial user, i.e. the scheduler correct.\n\nReplace the cpumask completely by:\n\n  - recording the direction internally in the CPU hotplug core state\n\n  - exposing that state via a documented function to the scheduler\n\nAfter that cpu_dying_mask is not longer in use and removed before the next\nuser trips over it.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n[Dennis: ported to v6.7-rc4, delete in cpumask.h didn\u0027t apply cleanly]\nSigned-off-by: Dennis Zhou \u003cdennis@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cfb545841a2c74a62546f95ecae6b1e7728767b9",
      "old_mode": 33188,
      "old_path": "include/linux/cpumask.h",
      "new_id": "b19b6fd29a0da52d1ed48fa7dbf07165ae0d8839",
      "new_mode": 33188,
      "new_path": "include/linux/cpumask.h"
    },
    {
      "type": "modify",
      "old_id": "c4929e9cd9be29a6d47c53c129b0bc6c50c76207",
      "old_mode": 33188,
      "old_path": "kernel/cpu.c",
      "new_id": "ce78757b753596a245dae8841252b0121dde7b9a",
      "new_mode": 33188,
      "new_path": "kernel/cpu.c"
    },
    {
      "type": "modify",
      "old_id": "a708d225c28e861922997ed27a25d1b21f072d2a",
      "old_mode": 33188,
      "old_path": "kernel/sched/core.c",
      "new_id": "6d4f0cdad446a9caa927e130fcf43d91bd577ad8",
      "new_mode": 33188,
      "new_path": "kernel/sched/core.c"
    },
    {
      "type": "modify",
      "old_id": "34dd3d7ba40bc0a5e3a11d7cf5cea4a641f030ad",
      "old_mode": 33188,
      "old_path": "kernel/smpboot.h",
      "new_id": "9d3b4d5544117457fc711ea388951f71acf7811e",
      "new_mode": 33188,
      "new_path": "kernel/smpboot.h"
    }
  ]
}
