Drivers: hv: vmbus: Suspend after cleaning up hv_sock and sub channels
authorDexuan Cui <decui@microsoft.com>
Thu, 5 Sep 2019 23:01:21 +0000 (23:01 +0000)
committerSasha Levin <sashal@kernel.org>
Fri, 6 Sep 2019 18:52:44 +0000 (14:52 -0400)
commitb307b38962eb0f22d1aa6dcf53cb7d3c2ed5eec7
tree38f55d99f6960a7738cb8af94ce4837de60b2444
parent1f48dcf180e5422b1a633b24680dd0f5c3f540f5
Drivers: hv: vmbus: Suspend after cleaning up hv_sock and sub channels

Before suspend, Linux must make sure all the hv_sock channels have been
properly cleaned up, because a hv_sock connection can not persist across
hibernation, and the user-space app must be properly notified of the
state change of the connection.

Before suspend, Linux also must make sure all the sub-channels have been
destroyed, i.e. the related channel structs of the sub-channels must be
properly removed, otherwise they would cause a conflict when the
sub-channels are recreated upon resume.

Add a counter to track such channels, and vmbus_bus_suspend() should wait
for the counter to drop to zero.

Signed-off-by: Dexuan Cui <decui@microsoft.com>
Reviewed-by: Michael Kelley <mikelley@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hv/channel_mgmt.c
drivers/hv/connection.c
drivers/hv/hyperv_vmbus.h
drivers/hv/vmbus_drv.c