From: Andrzej Pietrasiewicz Date: Thu, 15 May 2014 11:43:50 +0000 (+0200) Subject: usb: gadget: f_uac2: don't queue new requests when shutting down X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=1ade5d7e179170e3cf4780ba578ebb8cc7aa15ef;p=openwrt%2Fstaging%2Fblogic.git usb: gadget: f_uac2: don't queue new requests when shutting down In some circumstances when g_audio is being unloaded there happens an endless loop in udc driver. It has happend on a board with s3c-hsotg. If there are requests in endpoint's queue, they are completed in a loop. But completing them might cause appending new requests to the queue. This patch causes agdev_iso_complete() to return immediately if request's status is -ESHUTDOWN. If it does not return immediately, then although the current request is removed from the queue, a new one is appended to the queue, so the above mentioned loop cannot end. Signed-off-by: Andrzej Pietrasiewicz Signed-off-by: Felipe Balbi --- diff --git a/drivers/usb/gadget/f_uac2.c b/drivers/usb/gadget/f_uac2.c index c024d27fcce2..6261db4a9910 100644 --- a/drivers/usb/gadget/f_uac2.c +++ b/drivers/usb/gadget/f_uac2.c @@ -196,7 +196,7 @@ agdev_iso_complete(struct usb_ep *ep, struct usb_request *req) struct snd_uac2_chip *uac2 = prm->uac2; /* i/f shutting down */ - if (!prm->ep_enabled) + if (!prm->ep_enabled || req->status == -ESHUTDOWN) return; /*