Message ID | 87h99c4804.fsf@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Sep 19, 2016 at 11:19:07AM +0300, Felipe Balbi wrote: > > Hi Greg, > > Tony Lindgren <tony@atomide.com> writes: > > Hi, > > > > Looks like commit c9ffc78745f8 ("usb: gadget: NCM: Protect dev->port_usb > > using dev->lock") causes hangs for me with Linux next. > > > > Reverting c9ffc78745f8 makes the issues go away, some more info below. > > Can you revert this commit from your tree? > > Here's the full commit for reference: > > commit c9ffc78745f89e300fe704348dd8e6800acf4d18 > Author: Harish Jenny K N <harish_kandiga@mentor.com> > Date: Fri Sep 9 11:30:42 2016 +0200 > > usb: gadget: NCM: Protect dev->port_usb using dev->lock > > This commit incorporates findings from > https://lkml.org/lkml/2016/4/25/594 > > The function has been modified to make sure we hold > the dev lock when accessing the net device pointer. > > Acked-by: Jim Baxter <jim_baxter@mentor.com> > Signed-off-by: Harish Jenny K N <harish_kandiga@mentor.com> > Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Now reverted, thanks. greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c index 9c8c9ed1dc9e..8cb08033b7c1 100644 --- a/drivers/usb/gadget/function/u_ether.c +++ b/drivers/usb/gadget/function/u_ether.c @@ -553,14 +553,16 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, spin_lock_irqsave(&dev->lock, flags); if (dev->port_usb) skb = dev->wrap(dev->port_usb, skb); - spin_unlock_irqrestore(&dev->lock, flags); if (!skb) { /* Multi frame CDC protocols may store the frame for * later which is not a dropped frame. */ if (dev->port_usb && - dev->port_usb->supports_multi_frame) + dev->port_usb->supports_multi_frame) { + spin_unlock_irqrestore(&dev->lock, flags); goto multiframe; + } + spin_unlock_irqrestore(&dev->lock, flags); goto drop; } }