)]}'
{
  "commit": "cdc994e1e33ddb5137d46bc6664077e03e51a5a0",
  "tree": "954f091db10fc2036937e07c9bbacf8e9180a575",
  "parents": [
    "20f634615cf93f80d77529bf97109891f481566b"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Thu Jul 19 14:54:09 2018 -0400"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Thu Jul 19 14:54:09 2018 -0400"
  },
  "message": "Support atomic printks\n\nprintk() was atomic at the granularity of a line - most of the time.  It\nwasn\u0027t for kernel faults, which leads to inscrutable bug reports.  At the\ntime, I avoided the lock to avoid deadlocking.  Instead, we can use a\nrecursive lock, which I\u0027m not normally a fan of.\n\nAdditionally, other callers can use print_lock() to atomically print\nmultiple lines.  The classic example is panic() and warn().  panic() has a\nfew issues of its own, so we have print_unlock_force().\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ce0f048b662cc503bbdfc7cc8bc78b6f5da5407a",
      "old_mode": 33188,
      "old_path": "kern/include/stdio.h",
      "new_id": "fd9cbaf00d3f5774b658a21c197ca13c330f10e2",
      "new_mode": 33188,
      "new_path": "kern/include/stdio.h"
    },
    {
      "type": "modify",
      "old_id": "28b8e06742c823264baeea4c7c6445e6f2b9b0b1",
      "old_mode": 33188,
      "old_path": "kern/src/init.c",
      "new_id": "60c64a719415dab928f4dc3c2cf8e3f1a3a8861c",
      "new_mode": 33188,
      "new_path": "kern/src/init.c"
    },
    {
      "type": "modify",
      "old_id": "6e54a04750e71266c1b76d200874dab244569153",
      "old_mode": 33188,
      "old_path": "kern/src/printf.c",
      "new_id": "7b415d9d3bdf5bddfee6611a508ffc173e545774",
      "new_mode": 33188,
      "new_path": "kern/src/printf.c"
    }
  ]
}
