mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-07 09:55:19 +02:00
xhci: Set quirky xHC PCI hosts to D3 _after_ stopping and freeing them.
commitf81dfa3b57
upstream. PCI xHC host should be stopped and xhci driver memory freed before putting host to PCI D3 state during PCI remove callback. Hosts with XHCI_SPURIOUS_WAKEUP quirk did this the wrong way around and set the host to D3 before calling usb_hcd_pci_remove(dev), which will access the host to stop it, and then free xhci. Fixes:f1f6d9a8b5
("xhci: don't dereference a xhci member after removing xhci") Cc: stable@vger.kernel.org Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Link: https://lore.kernel.org/r/20240905143300.1959279-12-mathias.nyman@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f7ba350f4e
commit
e29a1f8b74
|
@ -721,8 +721,10 @@ put_runtime_pm:
|
||||||
static void xhci_pci_remove(struct pci_dev *dev)
|
static void xhci_pci_remove(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
struct xhci_hcd *xhci;
|
struct xhci_hcd *xhci;
|
||||||
|
bool set_power_d3;
|
||||||
|
|
||||||
xhci = hcd_to_xhci(pci_get_drvdata(dev));
|
xhci = hcd_to_xhci(pci_get_drvdata(dev));
|
||||||
|
set_power_d3 = xhci->quirks & XHCI_SPURIOUS_WAKEUP;
|
||||||
|
|
||||||
xhci->xhc_state |= XHCI_STATE_REMOVING;
|
xhci->xhc_state |= XHCI_STATE_REMOVING;
|
||||||
|
|
||||||
|
@ -735,11 +737,11 @@ static void xhci_pci_remove(struct pci_dev *dev)
|
||||||
xhci->shared_hcd = NULL;
|
xhci->shared_hcd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Workaround for spurious wakeups at shutdown with HSW */
|
|
||||||
if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
|
|
||||||
pci_set_power_state(dev, PCI_D3hot);
|
|
||||||
|
|
||||||
usb_hcd_pci_remove(dev);
|
usb_hcd_pci_remove(dev);
|
||||||
|
|
||||||
|
/* Workaround for spurious wakeups at shutdown with HSW */
|
||||||
|
if (set_power_d3)
|
||||||
|
pci_set_power_state(dev, PCI_D3hot);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue
Block a user