)]}'
{
  "commit": "324dd8b894f90da8199121d1ee523a8066faa9ba",
  "tree": "b6d019ef8fd76715e542f763ae078f057851d792",
  "parents": [
    "1e467e30c44ad56e0c63bd95afe104d71cd434c1"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Thu Jul 19 20:57:05 2018 -0400"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Fri Jul 20 10:25:54 2018 -0400"
  },
  "message": "Add helper to run a function as a routine kmsg\n\nI often want to just create a kernel message that runs a particular\nfunction that already exists.  This helper (and its associated magic)\nwill do that for you.\n\nThe one slightly nasty thing is that we pass the function pointer as the\nfirst argument.  Kernel messages run functions of type amr_t, and those\nfunctions first argument is the source of the message.  That means we\ncan\u0027t just pass an arbitrary function and run it.  We used to have to\nmake trampoline functions - now we have a generic trampoline.\n\nIf we ever drop the message source, then we could just cast the argument\n\u0027f\u0027 to an amr_t.\n\nGotta love the macros.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2a7f081fc4e4f3f43e2d1d4fabb50284337fc9b9",
      "old_mode": 33188,
      "old_path": "kern/include/trap.h",
      "new_id": "5f389e6285c4e5eeab1361e830aba8db23528be2",
      "new_mode": 33188,
      "new_path": "kern/include/trap.h"
    },
    {
      "type": "modify",
      "old_id": "a854866af68d20304f3ec7354a7f942ef40d2441",
      "old_mode": 33188,
      "old_path": "kern/src/trap.c",
      "new_id": "2673c9fb6600158f4ae5174f4e459b43ea1ff0e2",
      "new_mode": 33188,
      "new_path": "kern/src/trap.c"
    }
  ]
}
