)]}'
{
  "commit": "dcbb196eef4a83314c872461cebdcc85737164ac",
  "tree": "9520b9b4bc732181fb734b91a09caf2cd1f8190d",
  "parents": [
    "71ce352c82344e56e7fdc1301e06d12631bfe981"
  ],
  "author": {
    "name": "David Chisnall",
    "email": "github@theravensnest.org",
    "time": "Fri Apr 12 14:10:31 2024 +0100"
  },
  "committer": {
    "name": "David Chisnall",
    "email": "davidchisnall@users.noreply.github.com",
    "time": "Fri Jun 07 11:36:59 2024 +0100"
  },
  "message": "Tickless scheduler\n\nThis commit incorporates several changes:\n\nTimers are now not set for a regular tick, they are set when a thread\nmay be preempted.  Specifically, the timer is set to the next timeout\nthat will trigger a scheduling operation.  This avoids timers\ntriggering a switch to the scheduler to do nothing (resume the currently\nrunning thread).\n\nThis means that if a thread sleeps for ten ticks while another runs, we\nwill get one timer interrupt ten ticks in the future, rather than ten\ninterrupts one tick apart.\n\nThis means that ticks are now calculated retroactively based on elapsed\ntime, rather than counted on each context switch.\n\nThis, in turn, necessitates some small API changes.  We previously\nconflated two things:\n\n - Sleep for N * (tick duration)\n - Yield and allow lower-priority threads to run for, at most, N * (tick\n   duration)\n\nThese are now deconflated by adding a second parameter to thread_sleep.\nMost sleeps are of the second form and so this is the default.\n\nThis reduces the time taken to run the test suite on Sonata by around\n30% and in the Ibex SAFE simulator by 13%.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "29a652b1b925fe0dbd036b6f20916cf116cb6f2e",
      "old_mode": 33188,
      "old_path": "sdk/core/allocator/main.cc",
      "new_id": "7a47e8212643f8e8331c96d012a9dc9a37270479",
      "new_mode": 33188,
      "new_path": "sdk/core/allocator/main.cc"
    },
    {
      "type": "modify",
      "old_id": "88442be36b6716d3946b7aa7b7bc94833fe3496c",
      "old_mode": 33188,
      "old_path": "sdk/core/scheduler/main.cc",
      "new_id": "098377019612d2b553f9e279ca876fd9d30049f7",
      "new_mode": 33188,
      "new_path": "sdk/core/scheduler/main.cc"
    },
    {
      "type": "modify",
      "old_id": "e5b2961430b47630109a8625274f5bbcce9f5b1b",
      "old_mode": 33188,
      "old_path": "sdk/core/scheduler/thread.h",
      "new_id": "e0cc5e4d8a26975548be2dc8ba3a6d61e63c8853",
      "new_mode": 33188,
      "new_path": "sdk/core/scheduler/thread.h"
    },
    {
      "type": "modify",
      "old_id": "a86120b51916dd92e09c06060596439dd95cb9f1",
      "old_mode": 33188,
      "old_path": "sdk/core/scheduler/timer.h",
      "new_id": "2c13ffbd50905675bbabcad930e9ea9f281dd6bd",
      "new_mode": 33188,
      "new_path": "sdk/core/scheduler/timer.h"
    },
    {
      "type": "modify",
      "old_id": "8836d088fa1fd8c8b53d90bfb638e36aa33a48f2",
      "old_mode": 33188,
      "old_path": "sdk/core/switcher/entry.S",
      "new_id": "716248da35872b8e3e8246eedbfb5800acd9bcd1",
      "new_mode": 33188,
      "new_path": "sdk/core/switcher/entry.S"
    },
    {
      "type": "modify",
      "old_id": "5aac587881a0f1d932e3cfe10a66eca489955282",
      "old_mode": 33188,
      "old_path": "sdk/include/FreeRTOS-Compat/task.h",
      "new_id": "398ff58b6c2b1079007de698c60fca849b92c0a4",
      "new_mode": 33188,
      "new_path": "sdk/include/FreeRTOS-Compat/task.h"
    },
    {
      "type": "modify",
      "old_id": "377f32332143449d59cfe325fa1f58ef1a0fdda8",
      "old_mode": 33188,
      "old_path": "sdk/include/platform/generic-riscv/platform-timer.hh",
      "new_id": "7b0d1f6fd13d552a03f5c704add443bce6b73289",
      "new_mode": 33188,
      "new_path": "sdk/include/platform/generic-riscv/platform-timer.hh"
    },
    {
      "type": "modify",
      "old_id": "3c5430a1555378a099eab43a3817ce4c965dbb71",
      "old_mode": 33188,
      "old_path": "sdk/include/thread.h",
      "new_id": "2f156ce876ae0f0250385e577916d00b66528694",
      "new_mode": 33188,
      "new_path": "sdk/include/thread.h"
    },
    {
      "type": "modify",
      "old_id": "0756164338984ee7d7979c431511619ed4fcd8a8",
      "old_mode": 33188,
      "old_path": "sdk/lib/debug/debug.cc",
      "new_id": "2642d9fbf736450ca0733203f1e1571ed19f2332",
      "new_mode": 33188,
      "new_path": "sdk/lib/debug/debug.cc"
    },
    {
      "type": "modify",
      "old_id": "ffd8da27126164cc96ccb6986546b7acbe276dea",
      "old_mode": 33188,
      "old_path": "tests/locks-test.cc",
      "new_id": "20798c8131f61a0e9bd31dfee2c6255d1723e04e",
      "new_mode": 33188,
      "new_path": "tests/locks-test.cc"
    }
  ]
}
