Skip to content

Commit

Permalink
Drivers: hv: vmbus: Log on missing offers if any
Browse files Browse the repository at this point in the history
When resuming from hibernation, log any channels that were present
before hibernation but now are gone.
In general, the boot-time devices configured for a resuming VM should be
the same as the devices in the VM at the time of hibernation. It's
uncommon for the configuration to have been changed such that offers
are missing. Changing the configuration violates the rules for
hibernation anyway.
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 with separate changes.

Signed-off-by: John Starks <jostarks@microsoft.com>
Co-developed-by: Naman Jain <namjain@linux.microsoft.com>
Signed-off-by: Naman Jain <namjain@linux.microsoft.com>
Reviewed-by: Easwar Hariharan <eahariha@linux.microsoft.com>
Reviewed-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Link: https://lore.kernel.org/r/20250102130712.1661-3-namjain@linux.microsoft.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
Message-ID: <20250102130712.1661-3-namjain@linux.microsoft.com>
  • Loading branch information
John Starks authored and Wei Liu committed Jan 10, 2025
1 parent 113386c commit fcf5203
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions drivers/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit fcf5203

Please sign in to comment.