On Wed, 2016-04-27 at 01:02 +0200, Ben Hutchings wrote: > 3.16.35-rc1 review patch. If anyone has any objections, please let me know. Also dropping this from 3.16-longterm. Ben. > ------------------ > > From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > > commit 4fccb0767fdbdb781a9c5b5c15ee7b219443c89d upstream. > > This patch fixes an issue that usbhsg_queue_done() may cause kernel > panic when dma callback is running and usb_ep_disable() is called > by interrupt handler. (Especially, we can reproduce this issue using > g_audio with usb-dmac driver.) > > For example of a flow: > usbhsf_dma_complete (on tasklet) > --> usbhsf_pkt_handler (on tasklet) > --> usbhsg_queue_done (on tasklet) > *** interrupt happened and usb_ep_disable() is called *** > --> usbhsg_queue_pop (on tasklet) > Then, oops happened. > > Fixes: e73a989 ("usb: renesas_usbhs: add DMAEngine support") > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> > Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> > --- > drivers/usb/renesas_usbhs/mod_gadget.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > --- a/drivers/usb/renesas_usbhs/mod_gadget.c > +++ b/drivers/usb/renesas_usbhs/mod_gadget.c > @@ -137,10 +137,14 @@ static void usbhsg_queue_done(struct usb > struct usbhs_pipe *pipe = pkt->pipe; > struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe); > struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt); > + unsigned long flags; > > ureq->req.actual = pkt->actual; > > - usbhsg_queue_pop(uep, ureq, 0); > + usbhs_lock(priv, flags); > + if (uep) > + __usbhsg_queue_pop(uep, ureq, 0); > + usbhs_unlock(priv, flags); > } > > static void usbhsg_queue_push(struct usbhsg_uep *uep, > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Ben Hutchings All extremists should be taken out and shot.
Attachment:
signature.asc
Description: This is a digitally signed message part