)]}'
{
  "commit": "2724fd11cbef8498ea1c4577a15a3aa8a40ed9b2",
  "tree": "b2fd3540194073a8b64c69496340e7931b598e8b",
  "parents": [
    "364cbae4128cbad61451446b8c724db210f0f109"
  ],
  "author": {
    "name": "Andy Ross",
    "email": "andrew.j.ross@intel.com",
    "time": "Mon Jan 29 14:55:20 2018 -0800"
  },
  "committer": {
    "name": "Anas Nashif",
    "email": "nashif@linux.intel.com",
    "time": "Fri Feb 16 10:44:29 2018 -0500"
  },
  "message": "kernel: SMP-aware scheduler\n\nThe scheduler needs a few tweaks to work in SMP mode:\n\n1. The \"cache\" field just doesn\u0027t work.  With more than one CPU,\n   caching the highest priority thread isn\u0027t useful as you may need N\n   of them at any given time before another thread is returned to the\n   scheduler.  You could recalculate it at every change, but that\n   provides no performance benefit.  Remove.\n\n2. The \"bitmask\" designed to prevent the need to individually check\n   priorities is likewise dropped.  This could work, but in fact on\n   our only current SMP system and with current K_NUM_PRIOPRITIES\n   values it provides no real benefit.\n\n3. The individual threads now have a \"current cpu\" and \"active\" flag\n   so that the choice of the next thread to run can correctly skip\n   threads that are active on other CPUs.\n\nThe upshot is that a decent amount of code gets #if\u0027d out, and the new\nSMP implementations for _get_highest_ready_prio() and\n_get_next_ready_thread() are simpler and smaller, at the expense of\nhaving to drop older optimizations.\n\nNote that scheduler synchronization is unchanged: all scheduler APIs\nused to require that an irq_lock() be held, which means that they now\nrequire the global spinlock via the same API.  This should be a very\nearly candidate for lock granularity attention!\n\nSigned-off-by: Andy Ross \u003candrew.j.ross@intel.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1f6bd43d0e08ef1a6f4f1e1820f50a2d22b1168b",
      "old_mode": 33188,
      "old_path": "include/kernel.h",
      "new_id": "43addc98841bf76ac48649cd0b64323d2dc53f09",
      "new_mode": 33188,
      "new_path": "include/kernel.h"
    },
    {
      "type": "modify",
      "old_id": "9db64b1a249c05e48b7d1a864657da7652761b83",
      "old_mode": 33188,
      "old_path": "kernel/include/kernel_offsets.h",
      "new_id": "bced0fc16f25b9b8f90b0bb62b2bb8c04435eded",
      "new_mode": 33188,
      "new_path": "kernel/include/kernel_offsets.h"
    },
    {
      "type": "modify",
      "old_id": "5716822bf932fab56aa3b95cd9fb09fb36302b85",
      "old_mode": 33188,
      "old_path": "kernel/include/kernel_structs.h",
      "new_id": "083615e107543c604082b8d5f0cdb869fb6b786e",
      "new_mode": 33188,
      "new_path": "kernel/include/kernel_structs.h"
    },
    {
      "type": "modify",
      "old_id": "b0f1ad770da6a49b2de0d93f68aa73ea21f3c7a5",
      "old_mode": 33188,
      "old_path": "kernel/include/ksched.h",
      "new_id": "70574026d8a89f5677366eea8a0390198b9cbf5a",
      "new_mode": 33188,
      "new_path": "kernel/include/ksched.h"
    },
    {
      "type": "modify",
      "old_id": "05baf631fc44378426deba898b2ef92a94365cf5",
      "old_mode": 33188,
      "old_path": "kernel/include/kswap.h",
      "new_id": "9d42ffb5fc459d3e65cec2ab35a94b86a5273e69",
      "new_mode": 33188,
      "new_path": "kernel/include/kswap.h"
    },
    {
      "type": "modify",
      "old_id": "9b8c132d438990ae68b15a3061a20f60eaaefd95",
      "old_mode": 33188,
      "old_path": "kernel/init.c",
      "new_id": "4d2f02996f57213d19a4a0506904cf6c67b3bc61",
      "new_mode": 33188,
      "new_path": "kernel/init.c"
    },
    {
      "type": "modify",
      "old_id": "c93e2d0ed849dfb6668dd86e5cde76b4eedbabd0",
      "old_mode": 33188,
      "old_path": "kernel/sched.c",
      "new_id": "f448a7fbc3f300e2e2421b0ef0e8c00eaa24fc21",
      "new_mode": 33188,
      "new_path": "kernel/sched.c"
    }
  ]
}
