From: John Starks <jostarks@xxxxxxxxxxxxx> When resuming from hibernation, log any channels that were present before hibernation but now are gone. In general, the essential virtual devices configured for a VM, remain same, before and after the hibernation and its not very common that some offers are missing. The cleanup of missing channels is not straight-forward and dependent on individual device driver functionality and implementation, so it can be added in future as separate changes. Signed-off-by: John Starks <jostarks@xxxxxxxxxxxxx> Co-developed-by: Naman Jain <namjain@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Naman Jain <namjain@xxxxxxxxxxxxxxxxxxx> Reviewed-by: Easwar Hariharan <eahariha@xxxxxxxxxxxxxxxxxxx> --- Changes since v1: https://lore.kernel.org/all/20241018115811.5530-1-namjain@xxxxxxxxxxxxxxxxxxx * Added Easwar's Reviewed-By tag * Addressed Saurabh's comments: * Added a note for missing channel cleanup in comments and commit msg --- drivers/hv/vmbus_drv.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index bd3fc41dc06b..08214f28694a 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2462,6 +2462,7 @@ static int vmbus_bus_suspend(struct device *dev) static int vmbus_bus_resume(struct device *dev) { + struct vmbus_channel *channel; struct vmbus_channel_msginfo *msginfo; size_t msgsize; int ret; @@ -2494,6 +2495,22 @@ static int vmbus_bus_resume(struct device *dev) vmbus_request_offers(); + mutex_lock(&vmbus_connection.channel_mutex); + list_for_each_entry(channel, &vmbus_connection.chn_list, listentry) { + if (channel->offermsg.child_relid != INVALID_RELID) + continue; + + /* hvsock channels are not expected to be present. */ + if (is_hvsock_channel(channel)) + continue; + + pr_err("channel %pUl/%pUl not present after resume.\n", + &channel->offermsg.offer.if_type, + &channel->offermsg.offer.if_instance); + /* ToDo: Cleanup these channels here */ + } + mutex_unlock(&vmbus_connection.channel_mutex); + /* Reset the event for the next suspend. */ reinit_completion(&vmbus_connection.ready_for_suspend_event); -- 2.34.1