From: Roger Quadros <rogerq@ti.com>
To: <mathias.nyman@intel.com>
Cc: <gregkh@linuxfoundation.org>, <linux-usb@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, Roger Quadros <rogerq@ti.com>
Subject: [PATCH 5/5] usb: xhci: Fix suspend/resume when used with OTG core
Date: Thu, 2 Apr 2015 15:23:29 +0300 [thread overview]
Message-ID: <1427977409-7671-6-git-send-email-rogerq@ti.com> (raw)
In-Reply-To: <1427977409-7671-1-git-send-email-rogerq@ti.com>
In the OTG case, the controller might not yet have been
added or is removed before the system suspends.
Assign xhci->main_hcd during probe to prevent NULL
pointer de-reference in xhci_suspend/resume().
Use the hcd->state flag to check if HCD is halted
and if that is so do nothing for xhci_suspend/resume().
Signed-off-by: Roger Quadros <rogerq@ti.com>
---
drivers/usb/host/xhci-pci.c | 1 +
drivers/usb/host/xhci-plat.c | 1 +
drivers/usb/host/xhci.c | 7 ++++++-
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 4ad2c14..5474e0b 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -222,6 +222,7 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
/* USB 2.0 roothub is stored in the PCI device now. */
hcd = dev_get_drvdata(&dev->dev);
xhci = hcd_to_xhci(hcd);
+ xhci->main_hcd = hcd;
xhci->shared_hcd = usb_create_shared_hcd(driver, &dev->dev,
pci_name(dev), hcd);
if (!xhci->shared_hcd) {
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 00f23f5..68d67f5 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -140,6 +140,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
xhci = hcd_to_xhci(hcd);
xhci->clk = clk;
+ xhci->main_hcd = hcd;
xhci->shared_hcd = usb_create_shared_hcd(driver, &pdev->dev,
dev_name(&pdev->dev), hcd);
if (!xhci->shared_hcd) {
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 8a7e319..22ec235 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -891,6 +891,9 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
struct usb_hcd *hcd = xhci_to_hcd(xhci);
u32 command;
+ if (!hcd->state)
+ return 0;
+
if (hcd->state != HC_STATE_SUSPENDED ||
xhci->shared_hcd->state != HC_STATE_SUSPENDED)
return -EINVAL;
@@ -977,6 +980,9 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
int retval = 0;
bool comp_timer_running = false;
+ if (!hcd->state)
+ return 0;
+
/* Wait a bit if either of the roothubs need to settle from the
* transition into bus suspend.
*/
@@ -4827,7 +4833,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
if (usb_hcd_is_primary_hcd(hcd)) {
xhci = hcd_to_xhci(hcd);
- xhci->main_hcd = hcd;
/* Mark the first roothub as being USB 2.0.
* The xHCI driver will register the USB 3.0 roothub.
*/
--
2.1.0
next prev parent reply other threads:[~2015-04-02 12:23 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-02 12:23 [PATCH 0/5] usb: xhci: fixes for OTG/DRD use Roger Quadros
2015-04-02 12:23 ` [PATCH 1/5] usb: xhci: cleanup xhci_hcd allocation Roger Quadros
2015-04-07 14:23 ` Mathias Nyman
2015-04-09 9:22 ` Roger Quadros
2015-04-13 12:48 ` Mathias Nyman
2015-04-14 9:21 ` Roger Quadros
2015-05-11 14:18 ` Roger Quadros
2015-05-12 14:22 ` Mathias Nyman
2015-05-25 15:05 ` Mathias Nyman
2015-05-26 16:31 ` Andrew Bresticker
2015-04-02 12:23 ` [PATCH 2/5] usb: xhci: plat: Create both HCDs before adding them Roger Quadros
2015-04-20 12:35 ` Mathias Nyman
2015-04-21 9:49 ` Roger Quadros
2015-04-21 7:11 ` Roger Quadros
2015-04-21 8:08 ` Maxime Ripard
2015-04-21 10:46 ` Roger Quadros
2015-04-22 13:46 ` Maxime Ripard
2015-04-02 12:23 ` [PATCH 3/5] usb: xhci: Allow usb_add/remove_hcd() to be called repeatedly Roger Quadros
2015-04-02 12:23 ` [PATCH 4/5] usb: xhci: fix xhci locking up during hcd remove Roger Quadros
2015-04-02 12:23 ` Roger Quadros [this message]
2015-05-26 14:15 ` [PATCH] usb: host: xhci-pci: Fix NULL pointer dereference error Roger Quadros
2015-05-29 13:19 ` Mathias Nyman
2015-05-29 13:49 ` Roger Quadros
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1427977409-7671-6-git-send-email-rogerq@ti.com \
--to=rogerq@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®