Re: [RFT] usbcore: Bug fix: system can't suspend with USB3.0 device connected to USB3.0 hub

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sarah,

Sorry for the delay. I am in conference (LSF & Collab Summit) this week, but will come back to you as soon as I have a chance.

CAI Qian

Sent from my iPhone

On 2011-4-4, at 10:39, Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx> wrote:

> On Sat, Apr 02, 2011 at 04:35:17AM -0400, CAI Qian wrote:
>> Hi Sarah,
>> 
>> After applied this patch on the top of USB3 hub changes patches in my branch (can also reproduce the original problem), the problem is still existed.
>> 
>> Freezing user space processes ... (elapsed 0.01 seconds) done.
>> Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
>> PM: Preallocating image memory... done (allocated 3924380 pages)
>> PM: Allocated 15697520 kbytes in 2.53 seconds (6204.55 MB/s)
>> hub 8-1:1.0: suspend error -16
>> pm_op(): usb_dev_freeze+0x0/0x20 returns -16
>> PM: Device 8-1 failed to freeze: error -16
> 
> So I think the 8-1 device is your roothub.  There's a couple different
> places the code could return -EBUSY (which is what -16 is).
> 
> In xhci-hub.c, there's
> 
>        if (hcd->self.root_hub->do_remote_wakeup) {
>                port_index = max_ports;
>                while (port_index--) {
>                        if (bus_state->resume_done[port_index] != 0) {
>                                spin_unlock_irqrestore(&xhci->lock, flags);
>                                xhci_dbg(xhci, "suspend failed because "
>                                                "port %d is resuming\n",
>                                                port_index + 1);
>                                return -EBUSY;
>                        }
>                }
>        }
> 
> There's also various places in the USB core on the device, bus, and host
> controller suspend patch that can return -EBUSY.  Can you enable
> CONFIG_USB_DEBUG and CONFIG_USB_XHCI_HCD_DEBUGGING and give me the dmesg
> output after you run `dmesg -n 8`?
> 
> That will allow me to see if the bus suspend function in the xHCI driver
> is failing.  If so, that could indicate something is wrong with the
> resume_done handling with the new split roothub code.
> 
> I'm wondering if you're running into an issue I had trouble reproducing.
> I thought there might be an issue with resume_done in the xHCI code, but
> Andiry Xu and Alan Stern convinced me my reasoning had to be wrong about
> the cause of the bug, so I never included the bug fix patch in the final
> patchset.  The patch is attached.  The patch only fixes the resume_done
> issue for a high speed hub, but I could either modify the patch to work
> for USB 3.0 hubs, or perhaps your resume_done issue is with the high
> speed portion of your USB 3.0 hub.
> 
> If, after you enable xHCI debugging and try to hibernate the system, you
> see a message from the xHCI driver about a particular port resuming,
> then try to apply that patch and see if it allows you suspend.
> 
>> Restarting tasks ... done.
>> 
>> Unfortunately, the latest Linus tree had a regression that prevent hibernate/resume from working even without those patches.
> 
> CIA, what host controller are you running under?  What brand of hub are
> you using?
> 
> Andiry, you said the simpler patched allowed your system to suspend and
> hibernate.  Which host are you using?  Which hub?
> 
>> It is now failing to resume every time tried after hibernate.
>> 
>> PM: Starting manual resume from disk
>> Freezing user space processes ... 
>> EXT4-fs (dm-0): INFO: recovery required on readonly filesystem
>> EXT4-fs (dm-0): write access will be enabled during recovery
>> EXT4-fs (dm-0): recovery complete
>> EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
>> (elapsed 0.18 seconds) done.
>> Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
>> PM: Loading and decompressing image data (301765 pages) ... done
>> PM: Read 1207060 kbytes in 6.47 seconds (186.56 MB/s)
>> serial 00:08: disabled
>> 
>> After applied this patch and the rest of Andiry's larger USB 3.0 hub power management patches on the top of linus tree, there is a conflict with patch [5/5] here.
>> 
>> http://marc.info/?l=linux-usb&m=130136847804961&w=2
>> 
>> --- drivers/usb/core/hub.c
>> +++ drivers/usb/core/hub.c
>> @@ -2305,7 +2305,13 @@
>>        }
>> 
>>        /* see 7.1.7.6 */
>> -       status = set_port_feature(hub->hdev, port1, USB_PORT_FEAT_SUSPEND);
>> +       if (hub_is_superspeed(hub->hdev))
>> +               status = set_port_feature(hub->hdev,
>> +                               port1 | (USB_SS_PORT_LS_U3 << 3),
>> +                               USB_PORT_FEAT_LINK_STATE);
>> +       else
>> +               status = set_port_feature(hub->hdev, port1,
>> +                                               USB_PORT_FEAT_SUSPEND);
>>        if (status) {
>>                dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n",
>>                                port1, status);
>> 
>> 
>> Do you have suggestion on which git tree/branch is the best to test those?
> 
> Those patches should apply against the usb-next branch of Greg's tree:
> 
> git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6.git
> 
> However, he doesn't track Linus' tree very closely, so I don't think
> that branch is up-to-date right now.  If you let me know when the other
> resume regression is fixed, then I can create apply the patchset on top
> of Linus' tree and create a branch for you to test.
> 
> Sarah Sharp
> <0001-xhci-Clear-internal-resume-state-on-reset.patch>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux