)]}'
{
  "commit": "940864ddabdb180e02041c4dcd46ba6f9eee732f",
  "tree": "cee174e45717dce64f7108a1c74182e691c1c8c2",
  "parents": [
    "b788db79896ef2a5817b9395ad63573b254a6d93"
  ],
  "author": {
    "name": "Rafael J. Wysocki",
    "email": "rjw@sisk.pl",
    "time": "Mon Sep 25 23:32:55 2006 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Tue Sep 26 08:49:02 2006 -0700"
  },
  "message": "[PATCH] swsusp: Use memory bitmaps during resume\n\nMake swsusp use memory bitmaps to store its internal information during the\nresume phase of the suspend-resume cycle.\n\nIf the pfns of saveable pages are saved during the suspend phase instead of\nthe kernel virtual addresses of these pages, we can use them during the resume\nphase directly to set the corresponding bits in a memory bitmap.  Then, this\nbitmap is used to mark the page frames corresponding to the pages that were\nsaveable before the suspend (aka \"unsafe\" page frames).\n\nNext, we allocate as many page frames as needed to store the entire suspend\nimage and make sure that there will be some extra free \"safe\" page frames for\nthe list of PBEs constructed later.  Subsequently, the image is loaded and, if\npossible, the data loaded from it are written into their \"original\" page\nframes (ie.  the ones they had occupied before the suspend).\n\nThe image data that cannot be written into their \"original\" page frames are\nloaded into \"safe\" page frames and their \"original\" kernel virtual addresses,\nas well as the addresses of the \"safe\" pages containing their copies, are\nstored in a list of PBEs.  Finally, the list of PBEs is used to copy the\nremaining image data into their \"original\" page frames (this is done\natomically, by the architecture-dependent parts of swsusp).\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nAcked-by: Pavel Machek \u003cpavel@ucw.cz\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c11cacf1a13b68b4b5cb703ce02949d1a13dc386",
      "old_mode": 33188,
      "old_path": "include/linux/suspend.h",
      "new_id": "b1237f16ecde3008c2f5a5ee592c78a97fefee20",
      "new_mode": 33188,
      "new_path": "include/linux/suspend.h"
    },
    {
      "type": "modify",
      "old_id": "6e9e2acc34f89fcec598908109818ccab9d9111a",
      "old_mode": 33188,
      "old_path": "kernel/power/power.h",
      "new_id": "bfe999f7b2720b9b3fa1b0a667103e35282922d1",
      "new_mode": 33188,
      "new_path": "kernel/power/power.h"
    },
    {
      "type": "modify",
      "old_id": "852e0df417193ef1bd697c0bfa434c8a58cd5026",
      "old_mode": 33188,
      "old_path": "kernel/power/snapshot.c",
      "new_id": "1b84313cbab5ad973d69dda99006d8439316af7d",
      "new_mode": 33188,
      "new_path": "kernel/power/snapshot.c"
    },
    {
      "type": "modify",
      "old_id": "8309d20b2563d2783395b91f45cad020f97329f0",
      "old_mode": 33188,
      "old_path": "kernel/power/swap.c",
      "new_id": "9b2ee5344dee10b51ae4f0d1fda84b1aa99d3de4",
      "new_mode": 33188,
      "new_path": "kernel/power/swap.c"
    },
    {
      "type": "modify",
      "old_id": "0ef5e4ba39e514ea32c853a2141acdd85a8b2856",
      "old_mode": 33188,
      "old_path": "kernel/power/user.c",
      "new_id": "2e4499f3e4d9a0a7c09d3caeb700c66aed671a1f",
      "new_mode": 33188,
      "new_path": "kernel/power/user.c"
    }
  ]
}
