Hi all, The patchset is to enhance hv_vmbus to support hibernation when Linux VM runs on Hyper-V. A second patchset to enhance the high-level VSC drivers (hv_netvsc, hv_storvsc, etc.) for hibernation will be posted after this patchset is acceped. If you want to test this hibernation feaure, all the needed patches can be found on my github branch: https://github.com/dcui/linux/commits/decui/hibernation/2019-0818/v5.3-rc5 This patchset is based on v5.3-rc5. Please review. Hi tglx, I hope all the 12 patchset, including the below 3 patches, [PATCH v3 01/12] x86/hyper-v: Suspend/resume the hypercall page for hibernation [PATCH v3 02/12] x86/hyper-v: Implement hv_is_hibernation_supported() [PATCH v3 03/12] clocksource/drivers: Suspend/resume Hyper-V can go through Sasha's hyperv/linux.git tree, since all the changes belong to the hv stuff. However, if you think it's better for these 3 patches to go through the tip.git tree, it also works for me. Hi Michael Kelley, I added your Reviewed-by's for patch 1, 3, 4, 5, 7 and 9, since you reviewed these patches. Please review the others. Looking forward to your comments! Thanks, Dexuan Changes in v2: Patch 3: Improved the changelog and added a comment. Patch 4: Remove the "hv_stimer_cleanup" in hv_synic_suspend(), because I suppose https://lkml.org/lkml/2019/7/27/5 will be accepted. Also improved changelog and the comment. Patch 5: Fixed the third argument of print_hex_dump_debug(). Also improved the changelog. Patch 6: Improved the changelog and the comment. Added a check for the 'vmbus_proto_version' in vmbus_bus_resume(). Changes in v3: Patch 2: Add a new API hv_is_hibernation_supported(). Patch 6: Add a new helper function is_sub_channel(). Patch 8: Find the old channels via Instance GUID rather than the RELID. Patch 10: Add code to clean up hv_sock channels by force Patch 11: Add code to wait in the suspend path: all the hv_sock channels and sub-channels should be cleaned up first before Linux sends the VMBUS UNLOAD message. Patch 12: Add code to fix up the old primary channels before further resuming. Dexuan Cui (12): x86/hyper-v: Suspend/resume the hypercall page for hibernation x86/hyper-v: Implement hv_is_hibernation_supported() clocksource/drivers: Suspend/resume Hyper-V clocksource for hibernation Drivers: hv: vmbus: Break out synic enable and disable operations Drivers: hv: vmbus: Suspend/resume the synic for hibernation Drivers: hv: vmbus: Add a helper function is_sub_channel() Drivers: hv: vmbus: Implement suspend/resume for VSC drivers for hibernation Drivers: hv: vmbus: Ignore the offers when resuming from hibernation Drivers: hv: vmbus: Suspend/resume the vmbus itself for hibernation Drivers: hv: vmbus: Clean up hv_sock channels by force upon suspend Drivers: hv: vmbus: Suspend after cleaning up hv_sock and sub channels Drivers: hv: vmbus: Resume after fixing up old primary channels arch/x86/hyperv/hv_init.c | 41 ++++++ drivers/clocksource/hyperv_timer.c | 25 ++++ drivers/hv/channel_mgmt.c | 127 +++++++++++++++--- drivers/hv/connection.c | 35 ++++- drivers/hv/hv.c | 66 ++++++---- drivers/hv/hyperv_vmbus.h | 33 +++++ drivers/hv/vmbus_drv.c | 262 +++++++++++++++++++++++++++++++++++++ include/asm-generic/mshyperv.h | 2 + include/linux/hyperv.h | 16 ++- 9 files changed, 558 insertions(+), 49 deletions(-) -- 1.8.3.1