)]}'
{
  "commit": "15c84731d647c34d1491793fa6be96f5de3432eb",
  "tree": "861d2e6864e87a5860e0998395a65eb977e5b721",
  "parents": [
    "e46cdb66c8fc1c8d61cfae0f219ff47ac4b9d531"
  ],
  "author": {
    "name": "Jeremy Fitzhardinge",
    "email": "jeremy@xensource.com",
    "time": "Tue Jul 17 18:37:05 2007 -0700"
  },
  "committer": {
    "name": "Jeremy Fitzhardinge",
    "email": "jeremy@goop.org",
    "time": "Wed Jul 18 08:47:43 2007 -0700"
  },
  "message": "xen: time implementation\n\nXen maintains a base clock which measures nanoseconds since system\nboot.  This is provided to guests via a shared page which contains a\nbase time in ns, a tsc timestamp at that point and tsc frequency\nparameters.  Guests can compute the current time by reading the tsc\nand using it to extrapolate the current time from the basetime.  The\nhypervisor makes sure that the frequency parameters are updated\nregularly, paricularly if the tsc changes rate or stops.\n\nThis is implemented as a clocksource, so the interface to the rest of\nthe kernel is a simple clocksource which simply returns the current\ntime directly in nanoseconds.\n\nXen also provides a simple timer mechanism, which allows a timeout to\nbe set in the future.  When that time arrives, a timer event is sent\nto the guest.  There are two timer interfaces:\n - An old one which also delivers a stream of (unused) ticks at 100Hz,\n   and on the same event, the actual timer events.  The 100Hz ticks\n   cause a lot of spurious wakeups, but are basically harmless.\n - The new timer interface doesn\u0027t have the 100Hz ticks, and can also\n   fail if the specified time is in the past.\n\nThis code presents the Xen timer as a clockevent driver, and uses the\nnew interface by preference.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nSigned-off-by: Chris Wright \u003cchrisw@sous-sol.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7a78f27bfb1600a108c7a8892d0a2f39cf58a76c",
      "old_mode": 33188,
      "old_path": "arch/i386/xen/Makefile",
      "new_id": "bf51cabed0d2e67b70229b2b63b874723bb4b420",
      "new_mode": 33188,
      "new_path": "arch/i386/xen/Makefile"
    },
    {
      "type": "modify",
      "old_id": "6417dfdccb4cf53b125b7a69333cf32a334705e3",
      "old_mode": 33188,
      "old_path": "arch/i386/xen/enlighten.c",
      "new_id": "25eb3592f11d5036082595b28ed872027b7791ca",
      "new_mode": 33188,
      "new_path": "arch/i386/xen/enlighten.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b457980ff3c2da2130dc39f8fa625ba241c663a5",
      "new_mode": 33188,
      "new_path": "arch/i386/xen/time.c"
    }
  ]
}
