)]}'
{
  "commit": "cf579dfb82550e34de7ccf3ef090d8b834ccd3a9",
  "tree": "764ed72670c18c86d3eb9650025c56d661a31315",
  "parents": [
    "181e9bdef37bfcaa41f3ab6c948a2a0d60a268b5"
  ],
  "author": {
    "name": "Rafael J. Wysocki",
    "email": "rjw@sisk.pl",
    "time": "Sun Jan 29 20:38:29 2012 +0100"
  },
  "committer": {
    "name": "Rafael J. Wysocki",
    "email": "rjw@sisk.pl",
    "time": "Sun Jan 29 20:38:29 2012 +0100"
  },
  "message": "PM / Sleep: Introduce \"late suspend\" and \"early resume\" of devices\n\nThe current device suspend/resume phases during system-wide power\ntransitions appear to be insufficient for some platforms that want\nto use the same callback routines for saving device states and\nrelated operations during runtime suspend/resume as well as during\nsystem suspend/resume.  In principle, they could point their\n.suspend_noirq() and .resume_noirq() to the same callback routines\nas their .runtime_suspend() and .runtime_resume(), respectively,\nbut at least some of them require device interrupts to be enabled\nwhile the code in those routines is running.\n\nIt also makes sense to have device suspend-resume callbacks that will\nbe executed with runtime PM disabled and with device interrupts\nenabled in case someone needs to run some special code in that\ncontext during system-wide power transitions.\n\nApart from this, .suspend_noirq() and .resume_noirq() were introduced\nas a workaround for drivers using shared interrupts and failing to\nprevent their interrupt handlers from accessing suspended hardware.\nIt appears to be better not to use them for other porposes, or we may\nhave to deal with some serious confusion (which seems to be happening\nalready).\n\nFor the above reasons, introduce new device suspend/resume phases,\n\"late suspend\" and \"early resume\" (and analogously for hibernation)\nwhose callback will be executed with runtime PM disabled and with\ndevice interrupts enabled and whose callback pointers generally may\npoint to runtime suspend/resume routines.\n\nSigned-off-by: Rafael J. Wysocki \u003crjw@sisk.pl\u003e\nReviewed-by: Mark Brown \u003cbroonie@opensource.wolfsonmicro.com\u003e\nReviewed-by: Kevin Hilman \u003ckhilman@ti.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "20af7def23c8e652ac0012b6f6fc731be0ee200d",
      "old_mode": 33188,
      "old_path": "Documentation/power/devices.txt",
      "new_id": "872815cd41d30bcc8e57df31b6b283a4872a2690",
      "new_mode": 33188,
      "new_path": "Documentation/power/devices.txt"
    },
    {
      "type": "modify",
      "old_id": "f76623cbe263ee0f95d847845118f84f56974be9",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/apm_32.c",
      "new_id": "5d56931a15b352b70262968db9b94a7ab3ac9ea6",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/apm_32.c"
    },
    {
      "type": "modify",
      "old_id": "e2cc3d2e0ecccc1d6e6cb9b8f8f95ac4f81812f5",
      "old_mode": 33188,
      "old_path": "drivers/base/power/main.c",
      "new_id": "b462c0e341cbf6721fc2ab1dc7f59314f344f625",
      "new_mode": 33188,
      "new_path": "drivers/base/power/main.c"
    },
    {
      "type": "modify",
      "old_id": "ce4fa0831860175dedd4b53d3cd22e168474f7b9",
      "old_mode": 33188,
      "old_path": "drivers/xen/manage.c",
      "new_id": "9e14ae6cd49c018bf45156d58c1ff4af7411fdc3",
      "new_mode": 33188,
      "new_path": "drivers/xen/manage.c"
    },
    {
      "type": "modify",
      "old_id": "e4982ac3fbbc4c2fa9f9d54a9bd0a8b088fcffc6",
      "old_mode": 33188,
      "old_path": "include/linux/pm.h",
      "new_id": "c68e1f22ac9534d36bda907ac72d72cc4c5dc877",
      "new_mode": 33188,
      "new_path": "include/linux/pm.h"
    },
    {
      "type": "modify",
      "old_id": "91784a4f860852d01f958ecce70439e381dcaabf",
      "old_mode": 33188,
      "old_path": "include/linux/suspend.h",
      "new_id": "ac1c114c499d088e0e9d7bed9f214abe9d924cf2",
      "new_mode": 33188,
      "new_path": "include/linux/suspend.h"
    },
    {
      "type": "modify",
      "old_id": "7b0886786701b845cfbd8823252392e40b11a1c8",
      "old_mode": 33188,
      "old_path": "kernel/kexec.c",
      "new_id": "a6a675cb9818ad43728ba7246472f62b44fcd23b",
      "new_mode": 33188,
      "new_path": "kernel/kexec.c"
    },
    {
      "type": "modify",
      "old_id": "6d6d28870335831fa05c80428fefc05e20be3f69",
      "old_mode": 33188,
      "old_path": "kernel/power/hibernate.c",
      "new_id": "a5d4cf0aa03e3ea908cc800198631bd9924cb096",
      "new_mode": 33188,
      "new_path": "kernel/power/hibernate.c"
    },
    {
      "type": "modify",
      "old_id": "9824b41e5a18cf5ecc5e57773b5ccc2195984c99",
      "old_mode": 33188,
      "old_path": "kernel/power/main.c",
      "new_id": "8c5014a4e05219a44fd6d20a69bd7f776967f09c",
      "new_mode": 33188,
      "new_path": "kernel/power/main.c"
    },
    {
      "type": "modify",
      "old_id": "4fd51beed87955f938f7b6545e49ffec0430da56",
      "old_mode": 33188,
      "old_path": "kernel/power/suspend.c",
      "new_id": "560a639614a1934601ca62de7abf9a759b9697da",
      "new_mode": 33188,
      "new_path": "kernel/power/suspend.c"
    }
  ]
}
