Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1534640
| From | Baolin Wang <baolin.wang@linaro.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command |
| Date | 2016-12-02 03:50 +0100 |
| Message-ID | <sJM5b-5UO-3@gated-at.bofh.it> (permalink) |
| References | <sJ93Q-49f-15@gated-at.bofh.it> <sJdK9-76e-19@gated-at.bofh.it> <sJrDr-7sX-13@gated-at.bofh.it> <sJzAZ-4ng-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On 1 December 2016 at 21:28, Mathias Nyman <mathias.nyman@linux.intel.com> wrote: > On 01.12.2016 06:54, Baolin Wang wrote: >> >> On 30 November 2016 at 22:09, Mathias Nyman >> <mathias.nyman@linux.intel.com> wrote: >>> >>> On 30.11.2016 11:02, Baolin Wang wrote: >>>> >>>> >>>> If the hardware never responds to the stop endpoint command, the >>>> URBs will never be completed, and we might hang the USB subsystem. >>>> The original watchdog timer is used to watch if one stop endpoint >>>> command is timeout, if timeout, then the watchdog timer will set >>>> XHCI_STATE_DYING, try to halt the xHCI host, and give back all >>>> pending URBs. >>>> >>>> But now we already have one command timer to control command timeout, >>>> thus we can also use the command timer to watch the stop endpoint >>>> command, instead of one duplicate watchdog timer which need to be >>>> removed. >>>> >>>> Meanwhile we don't need the 'stop_cmds_pending' flag to identy if >>>> this is the last stop endpoint command of one endpoint. Since we >>>> can make sure we only set one stop endpoint command for one endpoint >>>> by 'EP_HALT_PENDING' flag in xhci_urb_dequeue() function. Thus remove >>>> this flag. >>>> >>>> We also need to clean up the command queue before trying to halt the >>>> xHCI host in xhci_stop_endpoint_command_timeout() function. >>> >>> >>> >>> This isn't a bad idea. >>> >>> There are anyway some corner cases and details that need to be >>> checked, such as suspend (which will clear the command queue), module >>> unload >>> and abrupt host removal (like pci hotplug removal of host controller) >>> we need to make sure we can trust the command timer to always return the >>> canceled URB >> >> >> Yes, you are right, we need to check these carefully. >> >> Suspend process, module unload and abrupt host removal, they all will >> issue usb_disconnect() firstly before clear the command queue, it will >> check URBs for every endpoint by >> usb_disconnect()--->usb_disable_device()--->usb_disable_endpoint(), >> which will make sure every URBs of endpoints will be cancelled by the >> stop endpoint command responding or the timeout function of stop >> endpoint command (xhci_stop_endpoint_command_timeout()) in >> usb_hcd_flush_endpoint(). From that point, we can make sure the >> command timer will be useful to handle stop endpoint command timeout. >> Please correct me if I said something wrong. Thanks. >> > > This relies on current queued command that times out to be the stop endpoint > command. > > If host partially, or completely hangs there might be any number of commands > in the > command queue, and we would need to wait for each one of them to timeout, > finish > before we finally get to the stop endpoint command, and give back the urb. > > I think it would be better to first fix the issues with the current watchdog > function, get > those fixes into stable, and then think about moving to the command queue > timer. OK, make sense. Thanks. > > In short, this patch doesn't currently fix any existing issue, but might > cause the > timeout to be more unreliable > > -Mathias -- Baolin.wang Best Regards
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-11-30 10:10 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Mathias Nyman <mathias.nyman@linux.intel.com> - 2016-11-30 15:10 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-01 06:00 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Mathias Nyman <mathias.nyman@linux.intel.com> - 2016-12-01 14:30 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-02 03:50 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Lu Baolu <baolu.lu@linux.intel.com> - 2016-12-01 06:50 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-01 07:10 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-01 07:10 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Lu Baolu <baolu.lu@linux.intel.com> - 2016-12-01 07:40 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-01 08:40 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Lu Baolu <baolu.lu@linux.intel.com> - 2016-12-01 08:50 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-01 09:10 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Lu Baolu <baolu.lu@linux.intel.com> - 2016-12-02 02:20 +0100
Re: [RFC] usb: host: xhci: Remove the watchdog timer and use command timer to watch stop endpoint command Baolin Wang <baolin.wang@linaro.org> - 2016-12-02 03:50 +0100
csiph-web