From: Dexuan Cui <decui@xxxxxxxxxxxxx> Sent: Wednesday, January 6, 2021 5:46 PM > > When a Linux VM runs on Hyper-V, if the host toolstack doesn't support > hibernation for the VM (this happens on old Hyper-V hosts like Windows > Server 2016, or new Hyper-V hosts if the admin or user doesn't declare > the hibernation intent for the VM), the VM is discouraged from trying > hibernation (because the host doesn't guarantee that the VM's virtual > hardware configuration will remain exactly the same across hibernation), > i.e. the VM should not try to set up the swap partition/file for > hibernation, etc. > > x86 Hyper-V uses the presence of the virtual ACPI S4 state as the > indication of the host toolstack support for a VM. Currently there is > no easy and reliable way for the userspace to detect the presence of > the state (see https://lkml.org/lkml/2020/12/11/1097). Add > /sys/bus/vmbus/hibernation for this purpose. > > Signed-off-by: Dexuan Cui <decui@xxxxxxxxxxxxx> > --- > > This v3 is similar to v1, and the changes are: > Updated the documentation changes. > Updated the commit log. > /sys/bus/vmbus/supported_features -> /sys/bus/vmbus/hibernation > > The patch is targeted at the Hyper-V tree's hyperv-next branch. > > Documentation/ABI/stable/sysfs-bus-vmbus | 7 +++++++ > drivers/hv/vmbus_drv.c | 18 ++++++++++++++++++ > 2 files changed, 25 insertions(+) > > diff --git a/Documentation/ABI/stable/sysfs-bus-vmbus > b/Documentation/ABI/stable/sysfs-bus-vmbus > index c27b7b89477c..42599d9fa161 100644 > --- a/Documentation/ABI/stable/sysfs-bus-vmbus > +++ b/Documentation/ABI/stable/sysfs-bus-vmbus > @@ -1,3 +1,10 @@ > +What: /sys/bus/vmbus/hibernation > +Date: Jan 2021 > +KernelVersion: 5.12 > +Contact: Dexuan Cui <decui@xxxxxxxxxxxxx> > +Description: Whether the host supports hibernation for the VM. > +Users: Daemon that sets up swap partition/file for hibernation. > + > What: /sys/bus/vmbus/devices/<UUID>/id > Date: Jul 2009 > KernelVersion: 2.6.31 > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index d491fdcee61f..4c544473b1d9 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -678,6 +678,23 @@ static const struct attribute_group vmbus_dev_group = { > }; > __ATTRIBUTE_GROUPS(vmbus_dev); > > +/* Set up the attribute for /sys/bus/vmbus/hibernation */ > +static ssize_t hibernation_show(struct bus_type *bus, char *buf) > +{ > + return sprintf(buf, "%d\n", !!hv_is_hibernation_supported()); > +} > + > +static BUS_ATTR_RO(hibernation); > + > +static struct attribute *vmbus_bus_attrs[] = { > + &bus_attr_hibernation.attr, > + NULL, > +}; > +static const struct attribute_group vmbus_bus_group = { > + .attrs = vmbus_bus_attrs, > +}; > +__ATTRIBUTE_GROUPS(vmbus_bus); > + > /* > * vmbus_uevent - add uevent for our device > * > @@ -1024,6 +1041,7 @@ static struct bus_type hv_bus = { > .uevent = vmbus_uevent, > .dev_groups = vmbus_dev_groups, > .drv_groups = vmbus_drv_groups, > + .bus_groups = vmbus_bus_groups, > .pm = &vmbus_pm, > }; > > -- > 2.19.1 Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>