diff options
Diffstat (limited to '0001-Drivers-hv-vmbus-Fix-Suspend-to-Idle-for-Generation-.patch')
-rw-r--r-- | 0001-Drivers-hv-vmbus-Fix-Suspend-to-Idle-for-Generation-.patch | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/0001-Drivers-hv-vmbus-Fix-Suspend-to-Idle-for-Generation-.patch b/0001-Drivers-hv-vmbus-Fix-Suspend-to-Idle-for-Generation-.patch deleted file mode 100644 index 29c17a375..000000000 --- a/0001-Drivers-hv-vmbus-Fix-Suspend-to-Idle-for-Generation-.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 1a06d017fb3f388734ffbe5dedee6f8c3af5f2db Mon Sep 17 00:00:00 2001 -From: Dexuan Cui <decui@microsoft.com> -Date: Sat, 11 Apr 2020 20:50:35 -0700 -Subject: [PATCH] Drivers: hv: vmbus: Fix Suspend-to-Idle for Generation-2 VM - -Before the hibernation patchset (e.g. f53335e3289f), in a Generation-2 -Linux VM on Hyper-V, the user can run "echo freeze > /sys/power/state" to -freeze the system, i.e. Suspend-to-Idle. The user can press the keyboard -or move the mouse to wake up the VM. - -With the hibernation patchset, Linux VM on Hyper-V can hibernate to disk, -but Suspend-to-Idle is broken: when the synthetic keyboard/mouse are -suspended, there is no way to wake up the VM. - -Fix the issue by not suspending and resuming the vmbus devices upon -Suspend-to-Idle. - -Fixes: f53335e3289f ("Drivers: hv: vmbus: Suspend/resume the vmbus itself for hibernation") -Cc: stable@vger.kernel.org -Reviewed-by: Michael Kelley <mikelley@microsoft.com> -Signed-off-by: Dexuan Cui <decui@microsoft.com> -Link: https://lore.kernel.org/r/1586663435-36243-1-git-send-email-decui@microsoft.com -Signed-off-by: Wei Liu <wei.liu@kernel.org> ---- - drivers/hv/vmbus_drv.c | 43 +++++++++++++++++++++++++++++++++--------- - 1 file changed, 34 insertions(+), 9 deletions(-) - -diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c -index a68bce4d0ddb..e06c6b9555cf 100644 ---- a/drivers/hv/vmbus_drv.c -+++ b/drivers/hv/vmbus_drv.c -@@ -978,6 +978,9 @@ static int vmbus_resume(struct device *child_device) - - return drv->resume(dev); - } -+#else -+#define vmbus_suspend NULL -+#define vmbus_resume NULL - #endif /* CONFIG_PM_SLEEP */ - - /* -@@ -997,11 +1000,22 @@ static void vmbus_device_release(struct device *device) - } - - /* -- * Note: we must use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS rather than -- * SET_SYSTEM_SLEEP_PM_OPS: see the comment before vmbus_bus_pm. -+ * Note: we must use the "noirq" ops: see the comment before vmbus_bus_pm. -+ * -+ * suspend_noirq/resume_noirq are set to NULL to support Suspend-to-Idle: we -+ * shouldn't suspend the vmbus devices upon Suspend-to-Idle, otherwise there -+ * is no way to wake up a Generation-2 VM. -+ * -+ * The other 4 ops are for hibernation. - */ -+ - static const struct dev_pm_ops vmbus_pm = { -- SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(vmbus_suspend, vmbus_resume) -+ .suspend_noirq = NULL, -+ .resume_noirq = NULL, -+ .freeze_noirq = vmbus_suspend, -+ .thaw_noirq = vmbus_resume, -+ .poweroff_noirq = vmbus_suspend, -+ .restore_noirq = vmbus_resume, - }; - - /* The one and only one */ -@@ -2281,6 +2295,9 @@ static int vmbus_bus_resume(struct device *dev) - - return 0; - } -+#else -+#define vmbus_bus_suspend NULL -+#define vmbus_bus_resume NULL - #endif /* CONFIG_PM_SLEEP */ - - static const struct acpi_device_id vmbus_acpi_device_ids[] = { -@@ -2291,16 +2308,24 @@ static const struct acpi_device_id vmbus_acpi_device_ids[] = { - MODULE_DEVICE_TABLE(acpi, vmbus_acpi_device_ids); - - /* -- * Note: we must use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS rather than -- * SET_SYSTEM_SLEEP_PM_OPS, otherwise NIC SR-IOV can not work, because the -- * "pci_dev_pm_ops" uses the "noirq" callbacks: in the resume path, the -- * pci "noirq" restore callback runs before "non-noirq" callbacks (see -+ * Note: we must use the "no_irq" ops, otherwise hibernation can not work with -+ * PCI device assignment, because "pci_dev_pm_ops" uses the "noirq" ops: in -+ * the resume path, the pci "noirq" restore op runs before "non-noirq" op (see - * resume_target_kernel() -> dpm_resume_start(), and hibernation_restore() -> - * dpm_resume_end()). This means vmbus_bus_resume() and the pci-hyperv's -- * resume callback must also run via the "noirq" callbacks. -+ * resume callback must also run via the "noirq" ops. -+ * -+ * Set suspend_noirq/resume_noirq to NULL for Suspend-to-Idle: see the comment -+ * earlier in this file before vmbus_pm. - */ -+ - static const struct dev_pm_ops vmbus_bus_pm = { -- SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(vmbus_bus_suspend, vmbus_bus_resume) -+ .suspend_noirq = NULL, -+ .resume_noirq = NULL, -+ .freeze_noirq = vmbus_bus_suspend, -+ .thaw_noirq = vmbus_bus_resume, -+ .poweroff_noirq = vmbus_bus_suspend, -+ .restore_noirq = vmbus_bus_resume - }; - - static struct acpi_driver vmbus_acpi_driver = { --- -2.26.2 - |