mirror of https://gitee.com/openkylin/linux.git
usb/isp1760: Move function isp1760_endpoint_disable() within file.
Preparation for patch #2. The function isp1760_endpoint_disable() does almost the same thing as urb_dequeue(). In patch #2 I change these to use a common helper function instead of calling each other - for clarity but also to avoid releasing the spinlock while in a "questionable" state. It seemed proper to have these functions close to each other in the code. Signed-off-by: Arvid Brodin <arvid.brodin@enea.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
69fff59de4
commit
079cdb0947
|
@ -1558,6 +1558,40 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
|||
return retval;
|
||||
}
|
||||
|
||||
static void isp1760_endpoint_disable(struct usb_hcd *hcd,
|
||||
struct usb_host_endpoint *ep)
|
||||
{
|
||||
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
||||
struct isp1760_qh *qh;
|
||||
struct isp1760_qtd *qtd;
|
||||
unsigned long spinflags;
|
||||
int do_iter;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, spinflags);
|
||||
qh = ep->hcpriv;
|
||||
if (!qh)
|
||||
goto out;
|
||||
|
||||
do_iter = !list_empty(&qh->qtd_list);
|
||||
while (do_iter) {
|
||||
do_iter = 0;
|
||||
list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
|
||||
if (qtd->urb->ep == ep) {
|
||||
spin_unlock_irqrestore(&priv->lock, spinflags);
|
||||
isp1760_urb_dequeue(hcd, qtd->urb, -ECONNRESET);
|
||||
spin_lock_irqsave(&priv->lock, spinflags);
|
||||
do_iter = 1;
|
||||
break; /* Restart iteration */
|
||||
}
|
||||
}
|
||||
}
|
||||
ep->hcpriv = NULL;
|
||||
/* Cannot free qh here since it will be parsed by schedule_ptds() */
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&priv->lock, spinflags);
|
||||
}
|
||||
|
||||
static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf)
|
||||
{
|
||||
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
||||
|
@ -1927,40 +1961,6 @@ static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq,
|
|||
return retval;
|
||||
}
|
||||
|
||||
static void isp1760_endpoint_disable(struct usb_hcd *hcd,
|
||||
struct usb_host_endpoint *ep)
|
||||
{
|
||||
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
||||
struct isp1760_qh *qh;
|
||||
struct isp1760_qtd *qtd;
|
||||
unsigned long spinflags;
|
||||
int do_iter;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, spinflags);
|
||||
qh = ep->hcpriv;
|
||||
if (!qh)
|
||||
goto out;
|
||||
|
||||
do_iter = !list_empty(&qh->qtd_list);
|
||||
while (do_iter) {
|
||||
do_iter = 0;
|
||||
list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
|
||||
if (qtd->urb->ep == ep) {
|
||||
spin_unlock_irqrestore(&priv->lock, spinflags);
|
||||
isp1760_urb_dequeue(hcd, qtd->urb, -ECONNRESET);
|
||||
spin_lock_irqsave(&priv->lock, spinflags);
|
||||
do_iter = 1;
|
||||
break; /* Restart iteration */
|
||||
}
|
||||
}
|
||||
}
|
||||
ep->hcpriv = NULL;
|
||||
/* Cannot free qh here since it will be parsed by schedule_ptds() */
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&priv->lock, spinflags);
|
||||
}
|
||||
|
||||
static int isp1760_get_frame(struct usb_hcd *hcd)
|
||||
{
|
||||
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
||||
|
|
Loading…
Reference in New Issue