forked from luck/tmp_suning_uos_patched
USB: gadget: s3c-hsotg: Add missing unlock
In an error handling case the lock is not unlocked. The return is converted to a goto, to share the unlock at the end of the function. A simplified version of the semantic patch that finds this problem is as follows: (http://coccinelle.lip6.fr/) // <smpl> @r exists@ expression E1; identifier f; @@ f (...) { <+... * spin_lock_irqsave (E1,...); ... when != E1 * return ...; ...+> } // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
6d60261009
commit
19c190f9e0
@ -2145,6 +2145,7 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
|
|||||||
u32 epctrl;
|
u32 epctrl;
|
||||||
u32 mps;
|
u32 mps;
|
||||||
int dir_in;
|
int dir_in;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
dev_dbg(hsotg->dev,
|
dev_dbg(hsotg->dev,
|
||||||
"%s: ep %s: a 0x%02x, attr 0x%02x, mps 0x%04x, intr %d\n",
|
"%s: ep %s: a 0x%02x, attr 0x%02x, mps 0x%04x, intr %d\n",
|
||||||
@ -2196,7 +2197,8 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
|
|||||||
switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
|
switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
|
||||||
case USB_ENDPOINT_XFER_ISOC:
|
case USB_ENDPOINT_XFER_ISOC:
|
||||||
dev_err(hsotg->dev, "no current ISOC support\n");
|
dev_err(hsotg->dev, "no current ISOC support\n");
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
|
||||||
case USB_ENDPOINT_XFER_BULK:
|
case USB_ENDPOINT_XFER_BULK:
|
||||||
epctrl |= S3C_DxEPCTL_EPType_Bulk;
|
epctrl |= S3C_DxEPCTL_EPType_Bulk;
|
||||||
@ -2235,8 +2237,9 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
|
|||||||
/* enable the endpoint interrupt */
|
/* enable the endpoint interrupt */
|
||||||
s3c_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
|
s3c_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
|
||||||
|
|
||||||
|
out:
|
||||||
spin_unlock_irqrestore(&hs_ep->lock, flags);
|
spin_unlock_irqrestore(&hs_ep->lock, flags);
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int s3c_hsotg_ep_disable(struct usb_ep *ep)
|
static int s3c_hsotg_ep_disable(struct usb_ep *ep)
|
||||||
|
Loading…
Reference in New Issue
Block a user