* [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization [not found] <1393867817-10389-1-git-send-email-mathias.nyman@linux.intel.com> @ 2014-03-03 17:30 ` Mathias Nyman [not found] ` <20140303183733.GA13926@kroah.com> 0 siblings, 1 reply; 5+ messages in thread From: Mathias Nyman @ 2014-03-03 17:30 UTC (permalink / raw) To: gregkh Cc: linux-usb, linux-kernel, sarah.a.sharp, dan.j.williams, Mathias Nyman, stable xHCI driver has its own pci probe function that will call usb_hcd_pci_probe to register its usb-2 bus, and then continue to manually register the usb-3 bus. usb_hcd_pci_probe does a pm_runtime_put_noidle at the end and might thus trigger a runtime suspend before the usb-3 bus is ready. Prevent the runtime suspend by increasing the usage count in the beginning of xhci_pci_probe, and decrease it once the usb-3 bus is ready. xhci-platform driver is not using usb_hcd_pci_probe to set up busses and should not need to have it's usage count increased during probe. Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Acked-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Cc: stable@vger.kernel.org --- drivers/usb/host/xhci-pci.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 04f986d..753857f 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -190,6 +190,10 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) struct usb_hcd *hcd; driver = (struct hc_driver *)id->driver_data; + + /* Prevent runtime suspending between USB-2 and USB-3 initialization */ + pm_runtime_get_noresume(&dev->dev); + /* Register the USB 2.0 roothub. * FIXME: USB core must know to register the USB 2.0 roothub first. * This is sort of silly, because we could just set the HCD driver flags @@ -199,7 +203,7 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) retval = usb_hcd_pci_probe(dev, id); if (retval) - return retval; + goto put_runtime_pm; /* USB 2.0 roothub is stored in the PCI device now. */ hcd = dev_get_drvdata(&dev->dev); @@ -228,12 +232,17 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) if (xhci->quirks & XHCI_LPM_SUPPORT) hcd_to_bus(xhci->shared_hcd)->root_hub->lpm_capable = 1; + /* USB-2 and USB-3 roothubs initialized, allow runtime pm suspend */ + pm_runtime_put_noidle(&dev->dev); + return 0; put_usb3_hcd: usb_put_hcd(xhci->shared_hcd); dealloc_usb2_hcd: usb_hcd_pci_remove(dev); +put_runtime_pm: + pm_runtime_put_noidle(&dev->dev); return retval; } -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <20140303183733.GA13926@kroah.com>]
* Re: [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization [not found] ` <20140303183733.GA13926@kroah.com> @ 2014-03-04 11:50 ` Mathias Nyman 2014-03-04 17:04 ` Greg KH 0 siblings, 1 reply; 5+ messages in thread From: Mathias Nyman @ 2014-03-04 11:50 UTC (permalink / raw) To: Greg KH Cc: linux-usb, linux-kernel, sarah.a.sharp, dan.j.williams, stable, David Cohen On 03/03/2014 08:37 PM, Greg KH wrote: > On Mon, Mar 03, 2014 at 07:30:17PM +0200, Mathias Nyman wrote: >> xHCI driver has its own pci probe function that will call usb_hcd_pci_probe >> to register its usb-2 bus, and then continue to manually register the >> usb-3 bus. usb_hcd_pci_probe does a pm_runtime_put_noidle at the end and >> might thus trigger a runtime suspend before the usb-3 bus is ready. > > What is the result if that happens? Crashes. Null pointer dereference in xhci_suspend() when touching xhci->shared_hcd before it's initialized. More info here: http://marc.info/?l=linux-usb&m=138914518219334&w=2 > > Is this a regression from 3.13? Or something new for 3.14? > According to reporter its been around since 3.7 commit 596d789a211d134dc5f94d1e5957248c204ef850 USB: set hub's default autosuspend delay as 0 But nobody else than the reporter is able to trigger it. > What platform(s) are affected by this? David, the reporter (added to cc), mentioned "This bug happened in a platform with 1 usb3 host controller + 1 usb3 OTG controller" run by some Intel internal group http://marc.info/?l=linux-usb&m=138915969822029&w=2 David, can you elaborate on the platform? >> xhci-platform driver is not using usb_hcd_pci_probe to set up >> busses and should not need to have it's usage count increased during probe. > > I didn't think we had any in-kernel users of the xhci-platform driver, > has that changed and I missed a new platform being added? > Not that I'm aware of. I just wanted to point out that this issue is only a matter on pci enumerated xhci hosts. -Mathias ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization 2014-03-04 11:50 ` Mathias Nyman @ 2014-03-04 17:04 ` Greg KH 2014-03-04 17:35 ` David Cohen 2014-03-04 22:44 ` Sarah Sharp 0 siblings, 2 replies; 5+ messages in thread From: Greg KH @ 2014-03-04 17:04 UTC (permalink / raw) To: Mathias Nyman Cc: linux-usb, linux-kernel, sarah.a.sharp, dan.j.williams, stable, David Cohen On Tue, Mar 04, 2014 at 01:50:55PM +0200, Mathias Nyman wrote: > On 03/03/2014 08:37 PM, Greg KH wrote: > >On Mon, Mar 03, 2014 at 07:30:17PM +0200, Mathias Nyman wrote: > >>xHCI driver has its own pci probe function that will call usb_hcd_pci_probe > >>to register its usb-2 bus, and then continue to manually register the > >>usb-3 bus. usb_hcd_pci_probe does a pm_runtime_put_noidle at the end and > >>might thus trigger a runtime suspend before the usb-3 bus is ready. > > > >What is the result if that happens? > > Crashes. Null pointer dereference in xhci_suspend() when touching > xhci->shared_hcd before it's initialized. More info here: > > http://marc.info/?l=linux-usb&m=138914518219334&w=2 > > > > >Is this a regression from 3.13? Or something new for 3.14? > > > > According to reporter its been around since 3.7 > > commit 596d789a211d134dc5f94d1e5957248c204ef850 > USB: set hub's default autosuspend delay as 0 > > But nobody else than the reporter is able to trigger it. Then it can wait for 3.15-rc1, and then go back to the stable trees at that time, right? I'd prefer that as it's not a regression and not common. > >What platform(s) are affected by this? > > David, the reporter (added to cc), mentioned > "This bug happened in a platform with 1 usb3 host controller + 1 usb3 OTG > controller" run by some Intel internal group > > http://marc.info/?l=linux-usb&m=138915969822029&w=2 That sounds like a "not shipping platform" to me :) Please resend this with patches for 3.15-rc1. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization 2014-03-04 17:04 ` Greg KH @ 2014-03-04 17:35 ` David Cohen 2014-03-04 22:44 ` Sarah Sharp 1 sibling, 0 replies; 5+ messages in thread From: David Cohen @ 2014-03-04 17:35 UTC (permalink / raw) To: Greg KH Cc: Mathias Nyman, linux-usb, linux-kernel, sarah.a.sharp, dan.j.williams, stable Hi Greg, On Tue, Mar 04, 2014 at 09:04:58AM -0800, Greg KH wrote: > On Tue, Mar 04, 2014 at 01:50:55PM +0200, Mathias Nyman wrote: > > On 03/03/2014 08:37 PM, Greg KH wrote: > > >On Mon, Mar 03, 2014 at 07:30:17PM +0200, Mathias Nyman wrote: > > >>xHCI driver has its own pci probe function that will call usb_hcd_pci_probe > > >>to register its usb-2 bus, and then continue to manually register the > > >>usb-3 bus. usb_hcd_pci_probe does a pm_runtime_put_noidle at the end and > > >>might thus trigger a runtime suspend before the usb-3 bus is ready. > > > > > >What is the result if that happens? > > > > Crashes. Null pointer dereference in xhci_suspend() when touching > > xhci->shared_hcd before it's initialized. More info here: > > > > http://marc.info/?l=linux-usb&m=138914518219334&w=2 > > > > > > > >Is this a regression from 3.13? Or something new for 3.14? > > > > > > > According to reporter its been around since 3.7 > > > > commit 596d789a211d134dc5f94d1e5957248c204ef850 > > USB: set hub's default autosuspend delay as 0 > > > > But nobody else than the reporter is able to trigger it. > > Then it can wait for 3.15-rc1, and then go back to the stable trees at > that time, right? I'd prefer that as it's not a regression and not > common. > > > >What platform(s) are affected by this? > > > > David, the reporter (added to cc), mentioned > > "This bug happened in a platform with 1 usb3 host controller + 1 usb3 OTG > > controller" run by some Intel internal group > > > > http://marc.info/?l=linux-usb&m=138915969822029&w=2 > > That sounds like a "not shipping platform" to me :) Not quite. You'd find this configuration on Asus T100T. I said "not quite" because I don't think we can run Linux smoothly on it yet. But... > > Please resend this with patches for 3.15-rc1. ...that sounds fine :) Br, David > > thanks, > > greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization 2014-03-04 17:04 ` Greg KH 2014-03-04 17:35 ` David Cohen @ 2014-03-04 22:44 ` Sarah Sharp 1 sibling, 0 replies; 5+ messages in thread From: Sarah Sharp @ 2014-03-04 22:44 UTC (permalink / raw) To: Greg KH Cc: Mathias Nyman, linux-usb, linux-kernel, dan.j.williams, stable, David Cohen On Tue, Mar 04, 2014 at 09:04:58AM -0800, Greg KH wrote: > On Tue, Mar 04, 2014 at 01:50:55PM +0200, Mathias Nyman wrote: > > On 03/03/2014 08:37 PM, Greg KH wrote: > > >On Mon, Mar 03, 2014 at 07:30:17PM +0200, Mathias Nyman wrote: > > >>xHCI driver has its own pci probe function that will call usb_hcd_pci_probe > > >>to register its usb-2 bus, and then continue to manually register the > > >>usb-3 bus. usb_hcd_pci_probe does a pm_runtime_put_noidle at the end and > > >>might thus trigger a runtime suspend before the usb-3 bus is ready. > > > > > >What is the result if that happens? > > > > Crashes. Null pointer dereference in xhci_suspend() when touching > > xhci->shared_hcd before it's initialized. More info here: > > > > http://marc.info/?l=linux-usb&m=138914518219334&w=2 > > > > > > > >Is this a regression from 3.13? Or something new for 3.14? > > > > > > > According to reporter its been around since 3.7 > > > > commit 596d789a211d134dc5f94d1e5957248c204ef850 > > USB: set hub's default autosuspend delay as 0 > > > > But nobody else than the reporter is able to trigger it. > > Then it can wait for 3.15-rc1, and then go back to the stable trees at > that time, right? I'd prefer that as it's not a regression and not > common. Ok, I'll queue it with the other features for 3.15. Sarah Sharp ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-03-04 22:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1393867817-10389-1-git-send-email-mathias.nyman@linux.intel.com>
2014-03-03 17:30 ` [PATCH v3 1/1] xhci: Prevent runtime pm from autosuspending during initialization Mathias Nyman
[not found] ` <20140303183733.GA13926@kroah.com>
2014-03-04 11:50 ` Mathias Nyman
2014-03-04 17:04 ` Greg KH
2014-03-04 17:35 ` David Cohen
2014-03-04 22:44 ` Sarah Sharp
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox