summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhengjun Xing <zhengjun.xing@linux.intel.com>2018-02-12 14:24:51 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-02-25 11:15:43 +0100
commitf0537b3962ad97c903fbe0067f974e98f6769206 (patch)
tree00977a3335fef52cbb22269bd82fdb3a178c7db0
parent11474eb609f4a7469d85109347f74ee8972925fa (diff)
downloadlinux-stable-f0537b3962ad97c903fbe0067f974e98f6769206.tar.gz
linux-stable-f0537b3962ad97c903fbe0067f974e98f6769206.tar.bz2
linux-stable-f0537b3962ad97c903fbe0067f974e98f6769206.zip
xhci: fix xhci debugfs errors in xhci_stop
commit 11cd764dc9a030991880ad4d51db93918afa5822 upstream. In function xhci_stop, xhci_debugfs_exit called before xhci_mem_cleanup. xhci_debugfs_exit removed the xhci debugfs root nodes, xhci_mem_cleanup called function xhci_free_virt_devices_depth_first which in turn called function xhci_debugfs_remove_slot. Function xhci_debugfs_remove_slot removed the nodes for devices, the nodes folders are sub folder of xhci debugfs. It is unreasonable to remove xhci debugfs root folder before xhci debugfs sub folder. Function xhci_mem_cleanup should be called before function xhci_debugfs_exit. Fixes: 02b6fdc2a153 ("usb: xhci: Add debugfs interface for xHCI driver") Cc: <stable@vger.kernel.org> # v4.15 Signed-off-by: Zhengjun Xing <zhengjun.xing@linux.intel.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/xhci.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 82e41578dba0..5c1326154e66 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -652,8 +652,6 @@ static void xhci_stop(struct usb_hcd *hcd)
return;
}
- xhci_debugfs_exit(xhci);
-
spin_lock_irq(&xhci->lock);
xhci->xhc_state |= XHCI_STATE_HALTED;
xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
@@ -685,6 +683,7 @@ static void xhci_stop(struct usb_hcd *hcd)
xhci_dbg_trace(xhci, trace_xhci_dbg_init, "cleaning up memory");
xhci_mem_cleanup(xhci);
+ xhci_debugfs_exit(xhci);
xhci_dbg_trace(xhci, trace_xhci_dbg_init,
"xhci_stop completed - status = %x",
readl(&xhci->op_regs->status));