* [PATCH v3 1/3] Drivers: hv: vmbus: Disable Suspend-to-Idle for VMBus
2024-09-30 8:41 [PATCH v3 0/3] Disable Suspend-to-Idle in Hyper-V and Fix Hibernation Interruptions Erni Sri Satya Vennela
@ 2024-09-30 8:41 ` Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 2/3] Revert "Input: hyperv-keyboard - register as a wakeup source" Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 3/3] Revert "HID: hyperv: " Erni Sri Satya Vennela
2 siblings, 0 replies; 4+ messages in thread
From: Erni Sri Satya Vennela @ 2024-09-30 8:41 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, jikos, bentiss, dmitry.torokhov,
mikelley, linux-hyperv, linux-input, linux-kernel
Cc: ernis, Erni Sri Satya Vennela, stable, Saurabh Sengar
This change is specific to Hyper-V based VMs.
If the Virtual Machine Connection window is focused,
a Hyper-V VM user can unintentionally touch the keyboard/mouse
when the VM is hibernating or resuming, and consequently the
hibernation or resume operation can be aborted unexpectedly.
Fix the issue by no longer registering the keyboard/mouse as
wakeup devices (see the other two patches for the
changes to drivers/input/serio/hyperv-keyboard.c and
drivers/hid/hid-hyperv.c).
The keyboard/mouse were registered as wakeup devices because the
VM needs to be woken up from the Suspend-to-Idle state after
a user runs "echo freeze > /sys/power/state". It seems like
the Suspend-to-Idle feature has no real users in practice, so
let's no longer support that by returning -EOPNOTSUPP if a
user tries to use that.
$echo freeze > /sys/power/state
> bash: echo: write error: Operation not supported
Fixes: 1a06d017fb3f ("Drivers: hv: vmbus: Fix Suspend-to-Idle for Generation-2 VM")
Cc: stable@vger.kernel.org
Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
---
Changes in v2:
* Add "#define vmbus_freeze NULL" when CONFIG_PM_SLEEP is not
enabled.
* Change commit message to clarify that this change is specifc to
Hyper-V based VMs.
Changes in v3:
* Add 'Cc: stable@vger.kernel.org' in sign-off area.
---
drivers/hv/vmbus_drv.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 965d2a4efb7e..8f445c849512 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -900,6 +900,19 @@ static void vmbus_shutdown(struct device *child_device)
}
#ifdef CONFIG_PM_SLEEP
+/*
+ * vmbus_freeze - Suspend-to-Idle
+ */
+static int vmbus_freeze(struct device *child_device)
+{
+/*
+ * Do not support Suspend-to-Idle ("echo freeze > /sys/power/state") as
+ * that would require registering the Hyper-V synthetic mouse/keyboard
+ * devices as wakeup devices, which can abort hibernation/resume unexpectedly.
+ */
+ return -EOPNOTSUPP;
+}
+
/*
* vmbus_suspend - Suspend a vmbus device
*/
@@ -938,6 +951,7 @@ static int vmbus_resume(struct device *child_device)
return drv->resume(dev);
}
#else
+#define vmbus_freeze NULL
#define vmbus_suspend NULL
#define vmbus_resume NULL
#endif /* CONFIG_PM_SLEEP */
@@ -969,7 +983,7 @@ static void vmbus_device_release(struct device *device)
*/
static const struct dev_pm_ops vmbus_pm = {
- .suspend_noirq = NULL,
+ .suspend_noirq = vmbus_freeze,
.resume_noirq = NULL,
.freeze_noirq = vmbus_suspend,
.thaw_noirq = vmbus_resume,
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v3 2/3] Revert "Input: hyperv-keyboard - register as a wakeup source"
2024-09-30 8:41 [PATCH v3 0/3] Disable Suspend-to-Idle in Hyper-V and Fix Hibernation Interruptions Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 1/3] Drivers: hv: vmbus: Disable Suspend-to-Idle for VMBus Erni Sri Satya Vennela
@ 2024-09-30 8:41 ` Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 3/3] Revert "HID: hyperv: " Erni Sri Satya Vennela
2 siblings, 0 replies; 4+ messages in thread
From: Erni Sri Satya Vennela @ 2024-09-30 8:41 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, jikos, bentiss, dmitry.torokhov,
mikelley, linux-hyperv, linux-input, linux-kernel
Cc: ernis, Erni Sri Satya Vennela
This reverts commit 62238f3aadc9bc56da70100e19ec61b9f8d72a5f.
Remove keyboard as wakeup source since Suspend-To-Idle feature
is disabled.
Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
---
drivers/input/serio/hyperv-keyboard.c | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/drivers/input/serio/hyperv-keyboard.c b/drivers/input/serio/hyperv-keyboard.c
index 31d9dacd2fd1..b42c546636bf 100644
--- a/drivers/input/serio/hyperv-keyboard.c
+++ b/drivers/input/serio/hyperv-keyboard.c
@@ -162,15 +162,6 @@ static void hv_kbd_on_receive(struct hv_device *hv_dev,
serio_interrupt(kbd_dev->hv_serio, scan_code, 0);
}
spin_unlock_irqrestore(&kbd_dev->lock, flags);
-
- /*
- * Only trigger a wakeup on key down, otherwise
- * "echo freeze > /sys/power/state" can't really enter the
- * state because the Enter-UP can trigger a wakeup at once.
- */
- if (!(info & IS_BREAK))
- pm_wakeup_hard_event(&hv_dev->device);
-
break;
default:
@@ -356,9 +347,6 @@ static int hv_kbd_probe(struct hv_device *hv_dev,
goto err_close_vmbus;
serio_register_port(kbd_dev->hv_serio);
-
- device_init_wakeup(&hv_dev->device, true);
-
return 0;
err_close_vmbus:
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v3 3/3] Revert "HID: hyperv: register as a wakeup source"
2024-09-30 8:41 [PATCH v3 0/3] Disable Suspend-to-Idle in Hyper-V and Fix Hibernation Interruptions Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 1/3] Drivers: hv: vmbus: Disable Suspend-to-Idle for VMBus Erni Sri Satya Vennela
2024-09-30 8:41 ` [PATCH v3 2/3] Revert "Input: hyperv-keyboard - register as a wakeup source" Erni Sri Satya Vennela
@ 2024-09-30 8:41 ` Erni Sri Satya Vennela
2 siblings, 0 replies; 4+ messages in thread
From: Erni Sri Satya Vennela @ 2024-09-30 8:41 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, jikos, bentiss, dmitry.torokhov,
mikelley, linux-hyperv, linux-input, linux-kernel
Cc: ernis, Erni Sri Satya Vennela
This reverts commit f1210455e78a610c7b316389b31c162c371d888c.
Remove mouse as wakeup source since Suspend-To-Idle feature
is disabled.
Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
---
drivers/hid/hid-hyperv.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c
index f33485d83d24..b6d0f7db4c93 100644
--- a/drivers/hid/hid-hyperv.c
+++ b/drivers/hid/hid-hyperv.c
@@ -293,9 +293,6 @@ static void mousevsc_on_receive(struct hv_device *device,
memcpy(input_dev->input_buf, input_report->buffer, len);
hid_input_report(input_dev->hid_device, HID_INPUT_REPORT,
input_dev->input_buf, len, 1);
-
- pm_wakeup_hard_event(&input_dev->device->device);
-
break;
default:
pr_err("unsupported hid msg type - type %d len %d\n",
@@ -502,8 +499,6 @@ static int mousevsc_probe(struct hv_device *device,
goto probe_err2;
}
- device_init_wakeup(&device->device, true);
-
input_dev->connected = true;
input_dev->init_complete = true;
@@ -526,7 +521,6 @@ static void mousevsc_remove(struct hv_device *dev)
{
struct mousevsc_dev *input_dev = hv_get_drvdata(dev);
- device_init_wakeup(&dev->device, false);
vmbus_close(dev->channel);
hid_hw_stop(input_dev->hid_device);
hid_destroy_device(input_dev->hid_device);
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread