)]}'
{
  "commit": "d158cbdf39ffaec9dd5299fdfdfdd2c7897a71dc",
  "tree": "1a03042426b7469c06403a5e5615bc81d3ad1d1a",
  "parents": [
    "d307c4a8e826c44f9633bd3f7e60d0491e7d885a"
  ],
  "author": {
    "name": "Rafael J. Wysocki",
    "email": "rjw@sisk.pl",
    "time": "Thu Oct 18 03:04:53 2007 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@woody.linux-foundation.org",
    "time": "Thu Oct 18 14:37:19 2007 -0700"
  },
  "message": "Hibernation: Arbitrary boot kernel support on x86_64\n\nMake it possible to restore a hibernation image on x86_64 with the help of a\nkernel different from the one in the image.\n\nThe idea is to split the core restoration code into two separate parts and to\nplace each of them in a different page.   The first part belongs to the boot\nkernel and is executed as the last step of the image kernel\u0027s memory\nrestoration procedure.   Before being executed, it is relocated to a safe page\nthat won\u0027t be overwritten while copying the image kernel pages.\n\nThe final operation performed by it is a jump to the second part of the core\nrestoration code that belongs to the image kernel and has just been restored.\nThis code makes the CPU switch to the image kernel\u0027s page tables and restores\nthe state of general purpose registers (including the stack pointer) from\nbefore the hibernation.\n\nThe main issue with this idea is that in order to jump to the second part of\nthe core restoration code the boot kernel needs to know its address.\n However, this address may be passed to it in the image header.   Namely, the\npart of the image header previously used for checking if the version of the\nimage kernel is correct can be replaced with some architecture specific data\nthat will allow the boot kernel to jump to the right address within the image\nkernel.   These data should also be used for checking if the image kernel is\ncompatible with the boot kernel (as far as the memory restroration procedure\nis concerned).  It can be done, for example, with the help of a \"magic\" value\nthat has to be equal in both kernels, so that they can be regarded as\ncompatible.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "573c0a6e0ac636e29a1da03ae608094200f499f5",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/suspend_64.c",
      "new_id": "01fbfb018ca94590888eeb5bdd4dda25b41f4fdc",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/suspend_64.c"
    },
    {
      "type": "modify",
      "old_id": "16d183f67bc1e66e790f6160ae54a436554b9041",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/suspend_asm_64.S",
      "new_id": "40a209e0525cce8fb7d1a8e8acf7318fea3e9813",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/suspend_asm_64.S"
    },
    {
      "type": "modify",
      "old_id": "43fafe9e9c080db10bc0e5b0e7f52291b35e718a",
      "old_mode": 33188,
      "old_path": "arch/x86_64/Kconfig",
      "new_id": "78cb68f2ebbd7653c3b9d9395369fff7904e5761",
      "new_mode": 33188,
      "new_path": "arch/x86_64/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "b897e8cb55fbb7a73a43d4f1ac7a16a20f3d56d2",
      "old_mode": 33188,
      "old_path": "include/asm-x86/suspend_64.h",
      "new_id": "9440a7a1b99ab55fdb38e70333cdcdf9bc83e1d0",
      "new_mode": 33188,
      "new_path": "include/asm-x86/suspend_64.h"
    }
  ]
}
