RE: [RFT PATCH 2/2] xhci: handle port status events for removed USB3 hcd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 
> > Cc: <stable@xxxxxxxxxxxxxxx>
> > Reported-by: Peter Chen <peter.chen@xxxxxxx>
> > Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx>
> > ---
> >   drivers/usb/host/xhci-ring.c | 7 +++++++
> >   1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/usb/host/xhci-ring.c
> > b/drivers/usb/host/xhci-ring.c index f0a99aa..3d314b8 100644
> > --- a/drivers/usb/host/xhci-ring.c
> > +++ b/drivers/usb/host/xhci-ring.c
> > @@ -1552,6 +1552,13 @@ static void handle_port_status(struct xhci_hcd *xhci,
> >   		goto cleanup;
> >   	}
> >
> > +	/* We might get interrupts after shared_hcd is removed */
> > +	if (port->rhub == &xhci->usb3_rhub && xhci->shared_hcd == NULL) {
> > +		xhci_dbg(xhci, "ignore port event for removed USB3 hcd\n");
> > +		bogus_port_status = true;
> > +		goto cleanup;
> > +	}
> > +
> >   	hcd = port->rhub->hcd;
> >   	bus_state = &xhci->bus_state[hcd_index(hcd)];
> >   	hcd_portnum = port->hcd_portnum;
> >
> 
> This probably only applies from 4.18 onwards, to test on older kernel try something
> like this instead:
> 
> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index
> 6996235..7925da9 100644
> --- a/drivers/usb/host/xhci-ring.c
> +++ b/drivers/usb/host/xhci-ring.c
> @@ -1606,7 +1606,11 @@ static void handle_port_status(struct xhci_hcd *xhci,
>          hcd = xhci_to_hcd(xhci);
>          if ((major_revision == 0x03) != (hcd->speed >= HCD_USB3))
>                  hcd = xhci->shared_hcd;
> -
> +       if (!hcd) {
> +               bogus_port_status = true;
> +               goto cleanup;
> +       }
>          if (major_revision == 0) {
>                  xhci_warn(xhci, "Event for port %u not in "
>                                  "Extended Capabilities, ignoring.\n",
> 
> 
> Jack, Peter, do these patches solve the remove issues you are seeing?

At my two USB3 platforms, only apply the 1st patch can fix my problem.  Maybe
my USB3 port change interrupt occurs always before removing USB2 HCD.

Peter




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux