Re: Fix g_ether ethtool link reporting

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

 



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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux