Re: [patch 19/26] USB: mutual exclusion for EHCI init and port resets

Alan Stern <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.usb.devel
Message-ID <[email protected]>
On Mon, 19 Nov 2007, David Brownell wrote:

> Still needs the following update, IMO ... 
> 
> ======	CUT HERE
> A recent patch added software synchronization during EHCI startup,
> so ports aren't switched away from the companion controllers after
> resets have started.  This patch adds a short delay letting hardware
> get a chance to finish that port switching before any new resets begin.
> 
> That is, both sides of that hardware race window need to be closed.
> 
> Signed-off-by: David Brownell <[email protected]>
> ---
>  drivers/usb/host/ehci-hcd.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> --- g26.orig/drivers/usb/host/ehci-hcd.c	2007-11-13 16:07:12.000000000 -0800
> +++ g26/drivers/usb/host/ehci-hcd.c	2007-11-13 16:13:01.000000000 -0800
> @@ -594,12 +594,15 @@ static int ehci_run (struct usb_hcd *hcd
>  	 * from the companions to the EHCI controller.  If any of the
>  	 * companions are in the middle of a port reset at the time, it
>  	 * could cause trouble.  Write-locking ehci_cf_port_reset_rwsem
> -	 * guarantees that no resets are in progress.
> +	 * guarantees that no resets are in progress.  After we set CF,
> +	 * a short delay lets the hardware catch up; new resets shouldn't
> +	 * start before the port switching actions complete.
>  	 */
>  	down_write(&ehci_cf_port_reset_rwsem);
>  	hcd->state = HC_STATE_RUNNING;
>  	ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
>  	ehci_readl(ehci, &ehci->regs->command);	/* unblock posted writes */
> +	msleep(5);
>  	up_write(&ehci_cf_port_reset_rwsem);
>  
>  	temp = HC_VERSION(ehci_readl(ehci, &ehci->caps->hc_capbase));

This addition certainly won't hurt.  Did we ever get any feedback as to 
whether it actually helped?

Alan Stern
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.