Message ID | 1568244952-66716-1-git-send-email-decui@microsoft.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Jiri Kosina |
Headers | show |
Series | HID: hyperv: Add the support of hibernation | expand |
> From: Dexuan Cui <decui@microsoft.com> > Sent: Wednesday, September 11, 2019 4:36 PM > > We need mousevsc_pm_notify() to make sure the pm_wakeup_hard_event() > call > does not prevent the system from entering hibernation: the hibernation > is a relatively long process, which can be aborted by the call > pm_wakeup_hard_event(), which is invoked upon mouse events. > > Signed-off-by: Dexuan Cui <decui@microsoft.com> > --- > > This patch is basically a pure Hyper-V specific change and it has a > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: > Implement > suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's > Hyper-V tree's hyperv-next branch [ ... snipped ...] > > I request this patch should go through Sasha's tree rather than the > input subsystem's tree. > > Hi Jiri, Benjamin, can you please Ack? Hi Jiri, Benjamin, Can you please take a look at the patch? Thanks, -- Dexuan
On Wed, 25 Sep 2019, Dexuan Cui wrote: > > We need mousevsc_pm_notify() to make sure the pm_wakeup_hard_event() > > call does not prevent the system from entering hibernation: the > > hibernation is a relatively long process, which can be aborted by the > > call pm_wakeup_hard_event(), which is invoked upon mouse events. > > > > Signed-off-by: Dexuan Cui <decui@microsoft.com> > > --- > > > > This patch is basically a pure Hyper-V specific change and it has a > > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: > > Implement > > suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's > > Hyper-V tree's hyperv-next branch [ ... snipped ...] > > > > I request this patch should go through Sasha's tree rather than the > > input subsystem's tree. > > > > Hi Jiri, Benjamin, can you please Ack? > > Hi Jiri, Benjamin, > Can you please take a look at the patch? Hi Dexuan, I am planning to process it once 5.4 merge window is over and thus hid.git is open again for 5.5 material. Thanks,
On Thu, 26 Sep 2019, Jiri Kosina wrote: > > > We need mousevsc_pm_notify() to make sure the pm_wakeup_hard_event() > > > call does not prevent the system from entering hibernation: the > > > hibernation is a relatively long process, which can be aborted by the > > > call pm_wakeup_hard_event(), which is invoked upon mouse events. > > > > > > Signed-off-by: Dexuan Cui <decui@microsoft.com> > > > --- > > > > > > This patch is basically a pure Hyper-V specific change and it has a > > > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: > > > Implement > > > suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's > > > Hyper-V tree's hyperv-next branch [ ... snipped ...] > > > > > > I request this patch should go through Sasha's tree rather than the > > > input subsystem's tree. > > > > > > Hi Jiri, Benjamin, can you please Ack? > > > > Hi Jiri, Benjamin, > > Can you please take a look at the patch? > > Hi Dexuan, > > I am planning to process it once 5.4 merge window is over and thus hid.git > is open again for 5.5 material. Ah, now I see you asked for this go through hyperv tree. For that, feel free to add Acked-by: Jiri Kosina <jkosina@suse.cz> Thanks,
> From: Jiri Kosina <jikos@kernel.org> > Sent: Thursday, September 26, 2019 6:23 AM > To: Dexuan Cui <decui@microsoft.com> > > On Thu, 26 Sep 2019, Jiri Kosina wrote: > > > > > This patch is basically a pure Hyper-V specific change and it has a > > > > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: > > > > Implement > > > > suspend/resume for VSC drivers for hibernation"), which is on Sasha > Levin's > > > > Hyper-V tree's hyperv-next branch [ ... snipped ...] > > > > > > > > I request this patch should go through Sasha's tree rather than the > > > > input subsystem's tree. > > > > > > > > Hi Jiri, Benjamin, can you please Ack? > > > > > > Hi Jiri, Benjamin, > > > Can you please take a look at the patch? > > > > Hi Dexuan, > > > > I am planning to process it once 5.4 merge window is over and thus hid.git > > is open again for 5.5 material. > > Ah, now I see you asked for this go through hyperv tree. For that, feel > free to add > Acked-by: Jiri Kosina <jkosina@suse.cz> > Jiri Kosina Thanks for the Ack, Jiri! I have a bunch of patches, including this one, to support Linux VM's hibernation when the VM runs on Hyper-V. I just feel it would be better for all of them to go through the Hyper-V tree. :-) Thanks, -- Dexuan
On Fri, Sep 27, 2019 at 05:42:31AM +0000, Dexuan Cui wrote: >> From: Jiri Kosina <jikos@kernel.org> >> Sent: Thursday, September 26, 2019 6:23 AM >> To: Dexuan Cui <decui@microsoft.com> >> >> On Thu, 26 Sep 2019, Jiri Kosina wrote: >> >> > > > This patch is basically a pure Hyper-V specific change and it has a >> > > > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: >> > > > Implement >> > > > suspend/resume for VSC drivers for hibernation"), which is on Sasha >> Levin's >> > > > Hyper-V tree's hyperv-next branch [ ... snipped ...] >> > > > >> > > > I request this patch should go through Sasha's tree rather than the >> > > > input subsystem's tree. >> > > > >> > > > Hi Jiri, Benjamin, can you please Ack? >> > > >> > > Hi Jiri, Benjamin, >> > > Can you please take a look at the patch? >> > >> > Hi Dexuan, >> > >> > I am planning to process it once 5.4 merge window is over and thus hid.git >> > is open again for 5.5 material. >> >> Ah, now I see you asked for this go through hyperv tree. For that, feel >> free to add >> Acked-by: Jiri Kosina <jkosina@suse.cz> >> Jiri Kosina > >Thanks for the Ack, Jiri! > >I have a bunch of patches, including this one, to support Linux VM's hibernation >when the VM runs on Hyper-V. I just feel it would be better for all of them to >go through the Hyper-V tree. :-) Thank Dexuan, Jiri, Dexuan, I've been silently ignoring your patches for the past few weeks for the same reason as Jiri has mentioned. I'll pick them all up once the 5.4 merge window closes in a few days. -- Thanks, Sasha
> From: Sasha Levin <sashal@kernel.org> > Sent: Friday, September 27, 2019 5:05 AM > To: Dexuan Cui <decui@microsoft.com> > Cc: Jiri Kosina <jikos@kernel.org>; KY Srinivasan <kys@microsoft.com>; > Haiyang Zhang <haiyangz@microsoft.com>; Stephen Hemminger > <sthemmin@microsoft.com>; benjamin.tissoires@redhat.com; > linux-hyperv@vger.kernel.org; linux-input@vger.kernel.org; > linux-kernel@vger.kernel.org; Michael Kelley <mikelley@microsoft.com> > Subject: Re: [PATCH] HID: hyperv: Add the support of hibernation > > On Fri, Sep 27, 2019 at 05:42:31AM +0000, Dexuan Cui wrote: > >> From: Jiri Kosina <jikos@kernel.org> > >> Sent: Thursday, September 26, 2019 6:23 AM > >> To: Dexuan Cui <decui@microsoft.com> > >> > >> On Thu, 26 Sep 2019, Jiri Kosina wrote: > >> > >> > > > This patch is basically a pure Hyper-V specific change and it has a > >> > > > build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: > >> > > > Implement > >> > > > suspend/resume for VSC drivers for hibernation"), which is on Sasha > >> Levin's > >> > > > Hyper-V tree's hyperv-next branch [ ... snipped ...] > >> > > > > >> > > > I request this patch should go through Sasha's tree rather than the > >> > > > input subsystem's tree. > >> > > > > >> > > > Hi Jiri, Benjamin, can you please Ack? > >> > > > >> > > Hi Jiri, Benjamin, > >> > > Can you please take a look at the patch? > >> > > >> > Hi Dexuan, > >> > > >> > I am planning to process it once 5.4 merge window is over and thus hid.git > >> > is open again for 5.5 material. > >> > >> Ah, now I see you asked for this go through hyperv tree. For that, feel > >> free to add > >> Acked-by: Jiri Kosina <jkosina@suse.cz> > >> Jiri Kosina > > > >Thanks for the Ack, Jiri! > > > >I have a bunch of patches, including this one, to support Linux VM's > hibernation > >when the VM runs on Hyper-V. I just feel it would be better for all of them to > >go through the Hyper-V tree. :-) > > Thank Dexuan, Jiri, > > Dexuan, I've been silently ignoring your patches for the past few weeks > for the same reason as Jiri has mentioned. I'll pick them all up once > the 5.4 merge window closes in a few days. > > Thanks, > Sasha Thanks, Sasha! BTW, I'll post a v2 for this patch, as IMO I may be able to get rid of the mousevsc_pm_notify in this patch by disabling the channel callback in the suspend function. Thanks, -- Dexuan
On Sun, Sep 29, 2019 at 05:44:09PM +0000, Dexuan Cui wrote: >> From: Sasha Levin <sashal@kernel.org> >> Dexuan, I've been silently ignoring your patches for the past few weeks >> for the same reason as Jiri has mentioned. I'll pick them all up once >> the 5.4 merge window closes in a few days. > >Thanks, Sasha! > >BTW, I'll post a v2 for this patch, as IMO I may be able to get rid of the >mousevsc_pm_notify in this patch by disabling the channel callback >in the suspend function. Okay, I'm ignoring this patch for now then. -- Thanks, Sasha
diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c index cc5b09b8..e798740 100644 --- a/drivers/hid/hid-hyperv.c +++ b/drivers/hid/hid-hyperv.c @@ -12,6 +12,7 @@ #include <linux/hid.h> #include <linux/hiddev.h> #include <linux/hyperv.h> +#include <linux/suspend.h> struct hv_input_dev_info { @@ -150,6 +151,9 @@ struct mousevsc_dev { struct hv_input_dev_info hid_dev_info; struct hid_device *hid_device; u8 input_buf[HID_MAX_BUFFER_SIZE]; + + struct notifier_block pm_nb; + bool hibernation_in_progress; }; @@ -192,6 +196,9 @@ static void mousevsc_on_receive_device_info(struct mousevsc_dev *input_device, if (desc->bLength == 0) goto cleanup; + /* The pointer is not NULL when we resume from hibernation */ + if (input_device->hid_desc != NULL) + kfree(input_device->hid_desc); input_device->hid_desc = kmemdup(desc, desc->bLength, GFP_ATOMIC); if (!input_device->hid_desc) @@ -203,6 +210,9 @@ static void mousevsc_on_receive_device_info(struct mousevsc_dev *input_device, goto cleanup; } + /* The pointer is not NULL when we resume from hibernation */ + if (input_device->report_desc != NULL) + kfree(input_device->report_desc); input_device->report_desc = kzalloc(input_device->report_desc_size, GFP_ATOMIC); @@ -243,7 +253,7 @@ static void mousevsc_on_receive_device_info(struct mousevsc_dev *input_device, } static void mousevsc_on_receive(struct hv_device *device, - struct vmpacket_descriptor *packet) + const struct vmpacket_descriptor *packet) { struct pipe_prt_msg *pipe_msg; struct synthhid_msg *hid_msg; @@ -301,7 +311,8 @@ static void mousevsc_on_receive(struct hv_device *device, hid_input_report(input_dev->hid_device, HID_INPUT_REPORT, input_dev->input_buf, len, 1); - pm_wakeup_hard_event(&input_dev->device->device); + if (!input_dev->hibernation_in_progress) + pm_wakeup_hard_event(&input_dev->device->device); break; default: @@ -378,6 +389,8 @@ static int mousevsc_connect_to_vsp(struct hv_device *device) struct mousevsc_prt_msg *request; struct mousevsc_prt_msg *response; + reinit_completion(&input_dev->wait_event); + request = &input_dev->protocol_req; memset(request, 0, sizeof(struct mousevsc_prt_msg)); @@ -475,6 +488,29 @@ static int mousevsc_hid_raw_request(struct hid_device *hid, static struct hid_driver mousevsc_hid_driver; +static int mousevsc_pm_notify(struct notifier_block *nb, + unsigned long val, void *ign) +{ + struct mousevsc_dev *input_dev; + + input_dev = container_of(nb, struct mousevsc_dev, pm_nb); + + switch (val) { + case PM_HIBERNATION_PREPARE: + case PM_RESTORE_PREPARE: + input_dev->hibernation_in_progress = true; + return NOTIFY_OK; + + case PM_POST_HIBERNATION: + case PM_POST_RESTORE: + input_dev->hibernation_in_progress = false; + return NOTIFY_OK; + + default: + return NOTIFY_DONE; + } +} + static int mousevsc_probe(struct hv_device *device, const struct hv_vmbus_device_id *dev_id) { @@ -549,6 +585,9 @@ static int mousevsc_probe(struct hv_device *device, input_dev->connected = true; input_dev->init_complete = true; + input_dev->pm_nb.notifier_call = mousevsc_pm_notify; + register_pm_notifier(&input_dev->pm_nb); + return ret; probe_err2: @@ -568,6 +607,8 @@ static int mousevsc_remove(struct hv_device *dev) { struct mousevsc_dev *input_dev = hv_get_drvdata(dev); + unregister_pm_notifier(&input_dev->pm_nb); + device_init_wakeup(&dev->device, false); vmbus_close(dev->channel); hid_hw_stop(input_dev->hid_device); @@ -577,6 +618,30 @@ static int mousevsc_remove(struct hv_device *dev) return 0; } +static int mousevsc_suspend(struct hv_device *dev) +{ + vmbus_close(dev->channel); + + return 0; +} + +static int mousevsc_resume(struct hv_device *dev) +{ + int ret; + + ret = vmbus_open(dev->channel, + INPUTVSC_SEND_RING_BUFFER_SIZE, + INPUTVSC_RECV_RING_BUFFER_SIZE, + NULL, 0, + mousevsc_on_channel_callback, + dev); + if (ret) + return ret; + + ret = mousevsc_connect_to_vsp(dev); + return ret; +} + static const struct hv_vmbus_device_id id_table[] = { /* Mouse guid */ { HV_MOUSE_GUID, }, @@ -590,6 +655,8 @@ static int mousevsc_remove(struct hv_device *dev) .id_table = id_table, .probe = mousevsc_probe, .remove = mousevsc_remove, + .suspend = mousevsc_suspend, + .resume = mousevsc_resume, .driver = { .probe_type = PROBE_PREFER_ASYNCHRONOUS, },
We need mousevsc_pm_notify() to make sure the pm_wakeup_hard_event() call does not prevent the system from entering hibernation: the hibernation is a relatively long process, which can be aborted by the call pm_wakeup_hard_event(), which is invoked upon mouse events. Signed-off-by: Dexuan Cui <decui@microsoft.com> --- This patch is basically a pure Hyper-V specific change and it has a build dependency on the commit 271b2224d42f ("Drivers: hv: vmbus: Implement suspend/resume for VSC drivers for hibernation"), which is on Sasha Levin's Hyper-V tree's hyperv-next branch: https://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git/log/?h=hyperv-next I request this patch should go through Sasha's tree rather than the input subsystem's tree. Hi Jiri, Benjamin, can you please Ack? drivers/hid/hid-hyperv.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-)