On Wed, Mar 04, 2009 at 04:23:03PM +0300, Sergei Shtylyov wrote: > Jonathan McDowell wrote: > > >The g_ether USB gadget driver currently decides whether or not there's a > >link to report back for eth_get_link based on if the USB link speed is > >set. The USB gadget speed is however often set even before the device is > >enumerated. It seems more sensible to only report a "link" if we're > >actually connected to a host that wants to talk to us. The patch below > >does this for me - tested with the PXA27x UDC driver. > > >Signed-Off-By: Jonathan McDowell <noodles@xxxxxxxx> > > >diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c > >index 96d65ca..2f723dd 100644 > >--- a/drivers/usb/gadget/u_ether.c > >+++ b/drivers/usb/gadget/u_ether.c > >@@ -178,7 +178,14 @@ static void eth_get_drvinfo(struct net_device *net, > >struct ethtool_drvinfo *p) > > static u32 eth_get_link(struct net_device *net) > > { > > struct eth_dev *dev = netdev_priv(net); > >- return dev->gadget->speed != USB_SPEED_UNKNOWN; > >+ unsigned long flags; > >+ int status = 0; > >+ > >+ spin_lock_irqsave(&dev->lock, flags); > >+ status = (dev->port_usb != NULL); > >+ spin_unlock_irqrestore(&dev->lock, flags); > > I'm not sure what you're trying to achieve with grabbing spinlock here... The definition of the eth_dev structure says lock should be held while accessing port_usb. While it's only checking for whether it's NULL or not rather than anything more complicated this is the way it's also done in ueth_change_mtu. > >+ > >+ return status; > > } J. -- 101 things you can't have too much of : 21 - Uptime. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html