Skip to content

Commit

Permalink
[PATCH] USB: lh7a40x gadget driver: Fixed a dead lock
Browse files Browse the repository at this point in the history
There is a dead lock in lh7a40x udc driver. When the driver receive a
SET_FEATURE HALT request, the dev lock is taken by the interrupt
handler lh7a40x_udc_irq then the handler will call lh7a40x_set_halt
function which in its turn will try to acquire the dev lock.

Signed-off-by: Franck Bui-Huu <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Franck Bui-Huu authored and gregkh committed Feb 28, 2006
1 parent 754501b commit d5ec334
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions drivers/usb/gadget/lh7a40x_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1062,11 +1062,11 @@ static int lh7a40x_ep_enable(struct usb_ep *_ep,
ep->pio_irqs = 0;
ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);

spin_unlock_irqrestore(&ep->dev->lock, flags);

/* Reset halt state (does flush) */
lh7a40x_set_halt(_ep, 0);

spin_unlock_irqrestore(&ep->dev->lock, flags);

DEBUG("%s: enabled %s\n", __FUNCTION__, _ep->name);
return 0;
}
Expand Down Expand Up @@ -1775,6 +1775,7 @@ static void lh7a40x_ep0_setup(struct lh7a40x_udc *dev, u32 csr)
break;

qep = &dev->ep[ep_num];
spin_unlock(&dev->lock);
if (ctrl.bRequest == USB_REQ_SET_FEATURE) {
DEBUG_SETUP("SET_FEATURE (%d)\n",
ep_num);
Expand All @@ -1784,6 +1785,7 @@ static void lh7a40x_ep0_setup(struct lh7a40x_udc *dev, u32 csr)
ep_num);
lh7a40x_set_halt(&qep->ep, 0);
}
spin_lock(&dev->lock);
usb_set_index(0);

/* Reply with a ZLP on next IN token */
Expand Down

0 comments on commit d5ec334

Please sign in to comment.