[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Yl7KdjrrUrqMkzq8@rowland.harvard.edu>
Date: Tue, 19 Apr 2022 10:43:02 -0400
From: Alan Stern <stern@...land.harvard.edu>
To: Evan Green <evgreen@...omium.org>
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Thomas Gleixner <tglx@...utronix.de>,
Mathias Nyman <mathias.nyman@...el.com>,
Rajat Jain <rajatja@...omium.org>,
Bjorn Helgaas <bhelgaas@...gle.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@...el.com>,
Youngjin Jang <yj84.jang@...sung.com>,
linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org
Subject: Re: [PATCH v2 2/2] USB: hcd-pci: Fully suspend across freeze/thaw
cycle
On Mon, Apr 18, 2022 at 02:00:46PM -0700, Evan Green wrote:
> The documentation for the freeze() method says that it "should quiesce
> the device so that it doesn't generate IRQs or DMA". The unspoken
> consequence of not doing this is that MSIs aimed at non-boot CPUs may
> get fully lost if they're sent during the period where the target CPU is
> offline.
>
> The current callbacks for USB HCD do not fully quiesce interrupts,
> specifically on XHCI. Change to use the full suspend/resume flow for
> freeze/thaw to ensure interrupts are fully quiesced. This fixes issues
> where USB devices fail to thaw during hibernation because XHCI misses
> its interrupt and cannot recover.
>
> Signed-off-by: Evan Green <evgreen@...omium.org>
>
> ---
Acked-by: Alan Stern <stern@...land.harvard.edu>
> Changes in v2:
> - Added the patch modifying the remote wakeup state
That wasn't a change to this patch. No matter.
> - Removed the change to freeze_noirq/thaw_noirq
>
> drivers/usb/core/hcd-pci.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
> index 8176bc81a635d6..ae5e6d572376be 100644
> --- a/drivers/usb/core/hcd-pci.c
> +++ b/drivers/usb/core/hcd-pci.c
> @@ -616,10 +616,10 @@ const struct dev_pm_ops usb_hcd_pci_pm_ops = {
> .suspend_noirq = hcd_pci_suspend_noirq,
> .resume_noirq = hcd_pci_resume_noirq,
> .resume = hcd_pci_resume,
> - .freeze = check_root_hub_suspended,
> + .freeze = hcd_pci_suspend,
> .freeze_noirq = check_root_hub_suspended,
> .thaw_noirq = NULL,
> - .thaw = NULL,
> + .thaw = hcd_pci_resume,
> .poweroff = hcd_pci_suspend,
> .poweroff_noirq = hcd_pci_suspend_noirq,
> .restore_noirq = hcd_pci_resume_noirq,
Powered by blists - more mailing lists