xhci: Fix NULL pointer dereference with xhci_irq() for shared_hcd

Commit ("f068090426 xhci: Fix leaking USB3 shared_hcd
at xhci removal") sets xhci_shared_hcd to NULL without
stopping xhci host. This results into a race condition
where shared_hcd (super speed roothub) related interrupts
are being handled with xhci_irq happens when the
xhci_plat_remove is called and shared_hcd is set to NULL.
Fix this by setting the shared_hcd to NULL only after the
controller is halted and no interrupts are generated.

Change-Id: I2c7e460c171eacbf26d0bf7185d563ddb9efb504
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
This commit is contained in:
Sriharsha Allenki 2019-03-05 16:29:53 +05:30 • committed by Gerrit - the friendly Code Review server
commit 5bc4b708d1

View file

@ -374,10 +374,10 @@ static int xhci_plat_remove(struct platform_device *dev)
xhci->xhc_state |= XHCI_STATE_REMOVING;
usb_remove_hcd(shared_hcd);
xhci->shared_hcd = NULL;
usb_phy_shutdown(hcd->usb_phy);
usb_remove_hcd(hcd);
xhci->shared_hcd = NULL;
usb_put_hcd(shared_hcd);
clk_disable_unprepare(clk);