Commit f9c56cdd authored by Ido Shayevitz's avatar Ido Shayevitz Committed by Felipe Balbi

usb: gadget: Clear usb_endpoint_descriptor inside the struct usb_ep on disable

This fix a bug in f_serial, which expect the ep->desc to be NULL after
disabling an endpoint.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarIdo Shayevitz <idos@codeaurora.org>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent a003c187
...@@ -440,6 +440,7 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) ...@@ -440,6 +440,7 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
dep->stream_capable = false; dep->stream_capable = false;
dep->desc = NULL; dep->desc = NULL;
dep->endpoint.desc = NULL;
dep->comp_desc = NULL; dep->comp_desc = NULL;
dep->type = 0; dep->type = 0;
dep->flags = 0; dep->flags = 0;
......
...@@ -445,6 +445,7 @@ static void ep_init(struct udc_regs __iomem *regs, struct udc_ep *ep) ...@@ -445,6 +445,7 @@ static void ep_init(struct udc_regs __iomem *regs, struct udc_ep *ep)
VDBG(ep->dev, "ep-%d reset\n", ep->num); VDBG(ep->dev, "ep-%d reset\n", ep->num);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->ep.ops = &udc_ep_ops; ep->ep.ops = &udc_ep_ops;
INIT_LIST_HEAD(&ep->queue); INIT_LIST_HEAD(&ep->queue);
......
...@@ -557,6 +557,7 @@ static int at91_ep_disable (struct usb_ep * _ep) ...@@ -557,6 +557,7 @@ static int at91_ep_disable (struct usb_ep * _ep)
/* restore the endpoint's pristine config */ /* restore the endpoint's pristine config */
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->ep.maxpacket = ep->maxpacket; ep->ep.maxpacket = ep->maxpacket;
/* reset fifos and endpoint */ /* reset fifos and endpoint */
......
...@@ -659,6 +659,7 @@ static int usba_ep_disable(struct usb_ep *_ep) ...@@ -659,6 +659,7 @@ static int usba_ep_disable(struct usb_ep *_ep)
return -EINVAL; return -EINVAL;
} }
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
list_splice_init(&ep->queue, &req_list); list_splice_init(&ep->queue, &req_list);
if (ep->can_dma) { if (ep->can_dma) {
......
...@@ -2181,6 +2181,7 @@ static int ep_disable(struct usb_ep *ep) ...@@ -2181,6 +2181,7 @@ static int ep_disable(struct usb_ep *ep)
} while (mEp->dir != direction); } while (mEp->dir != direction);
mEp->desc = NULL; mEp->desc = NULL;
mEp->ep.desc = NULL;
spin_unlock_irqrestore(mEp->lock, flags); spin_unlock_irqrestore(mEp->lock, flags);
return retval; return retval;
......
...@@ -1638,6 +1638,7 @@ static int qe_ep_disable(struct usb_ep *_ep) ...@@ -1638,6 +1638,7 @@ static int qe_ep_disable(struct usb_ep *_ep)
/* Nuke all pending requests (does flush) */ /* Nuke all pending requests (does flush) */
nuke(ep, -ESHUTDOWN); nuke(ep, -ESHUTDOWN);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
ep->tx_req = NULL; ep->tx_req = NULL;
qe_ep_reset(udc, ep->epnum); qe_ep_reset(udc, ep->epnum);
......
...@@ -659,6 +659,7 @@ static int fsl_ep_disable(struct usb_ep *_ep) ...@@ -659,6 +659,7 @@ static int fsl_ep_disable(struct usb_ep *_ep)
nuke(ep, -ESHUTDOWN); nuke(ep, -ESHUTDOWN);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
spin_unlock_irqrestore(&udc->lock, flags); spin_unlock_irqrestore(&udc->lock, flags);
......
...@@ -235,6 +235,7 @@ static void ep_reset(struct goku_udc_regs __iomem *regs, struct goku_ep *ep) ...@@ -235,6 +235,7 @@ static void ep_reset(struct goku_udc_regs __iomem *regs, struct goku_ep *ep)
ep->ep.maxpacket = MAX_FIFO_SIZE; ep->ep.maxpacket = MAX_FIFO_SIZE;
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
ep->irqs = 0; ep->irqs = 0;
ep->dma = 0; ep->dma = 0;
......
...@@ -492,6 +492,7 @@ static int langwell_ep_disable(struct usb_ep *_ep) ...@@ -492,6 +492,7 @@ static int langwell_ep_disable(struct usb_ep *_ep)
nuke(ep, -ESHUTDOWN); nuke(ep, -ESHUTDOWN);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
spin_unlock_irqrestore(&dev->lock, flags); spin_unlock_irqrestore(&dev->lock, flags);
......
...@@ -608,6 +608,7 @@ static int mv_ep_disable(struct usb_ep *_ep) ...@@ -608,6 +608,7 @@ static int mv_ep_disable(struct usb_ep *_ep)
nuke(ep, -ESHUTDOWN); nuke(ep, -ESHUTDOWN);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
spin_unlock_irqrestore(&udc->lock, flags); spin_unlock_irqrestore(&udc->lock, flags);
......
...@@ -251,6 +251,7 @@ static int omap_ep_disable(struct usb_ep *_ep) ...@@ -251,6 +251,7 @@ static int omap_ep_disable(struct usb_ep *_ep)
spin_lock_irqsave(&ep->udc->lock, flags); spin_lock_irqsave(&ep->udc->lock, flags);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
nuke (ep, -ESHUTDOWN); nuke (ep, -ESHUTDOWN);
ep->ep.maxpacket = ep->maxpacket; ep->ep.maxpacket = ep->maxpacket;
ep->has_dma = 0; ep->has_dma = 0;
......
...@@ -1742,6 +1742,7 @@ static int pch_udc_pcd_ep_disable(struct usb_ep *usbep) ...@@ -1742,6 +1742,7 @@ static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
pch_udc_ep_disable(ep); pch_udc_ep_disable(ep);
pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num)); pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
INIT_LIST_HEAD(&ep->queue); INIT_LIST_HEAD(&ep->queue);
spin_unlock_irqrestore(&ep->dev->lock, iflags); spin_unlock_irqrestore(&ep->dev->lock, iflags);
return 0; return 0;
......
...@@ -283,6 +283,7 @@ static int pxa25x_ep_disable (struct usb_ep *_ep) ...@@ -283,6 +283,7 @@ static int pxa25x_ep_disable (struct usb_ep *_ep)
pxa25x_ep_fifo_flush (_ep); pxa25x_ep_fifo_flush (_ep);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 1; ep->stopped = 1;
local_irq_restore(flags); local_irq_restore(flags);
...@@ -1192,6 +1193,7 @@ static void udc_reinit(struct pxa25x_udc *dev) ...@@ -1192,6 +1193,7 @@ static void udc_reinit(struct pxa25x_udc *dev)
list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list); list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->stopped = 0; ep->stopped = 0;
INIT_LIST_HEAD (&ep->queue); INIT_LIST_HEAD (&ep->queue);
ep->pio_irqs = 0; ep->pio_irqs = 0;
......
...@@ -817,6 +817,7 @@ static int s3c_hsudc_ep_disable(struct usb_ep *_ep) ...@@ -817,6 +817,7 @@ static int s3c_hsudc_ep_disable(struct usb_ep *_ep)
s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN); s3c_hsudc_nuke_ep(hsep, -ESHUTDOWN);
hsep->desc = 0; hsep->desc = 0;
hsep->ep.desc = NULL;
hsep->stopped = 1; hsep->stopped = 1;
spin_unlock_irqrestore(&hsudc->lock, flags); spin_unlock_irqrestore(&hsudc->lock, flags);
...@@ -1006,6 +1007,7 @@ static void s3c_hsudc_initep(struct s3c_hsudc *hsudc, ...@@ -1006,6 +1007,7 @@ static void s3c_hsudc_initep(struct s3c_hsudc *hsudc,
hsep->ep.ops = &s3c_hsudc_ep_ops; hsep->ep.ops = &s3c_hsudc_ep_ops;
hsep->fifo = hsudc->regs + S3C_BR(epnum); hsep->fifo = hsudc->regs + S3C_BR(epnum);
hsep->desc = 0; hsep->desc = 0;
hsep->ep.desc = NULL;
hsep->stopped = 0; hsep->stopped = 0;
hsep->wedge = 0; hsep->wedge = 0;
......
...@@ -1148,6 +1148,7 @@ static int s3c2410_udc_ep_disable(struct usb_ep *_ep) ...@@ -1148,6 +1148,7 @@ static int s3c2410_udc_ep_disable(struct usb_ep *_ep)
dprintk(DEBUG_NORMAL, "ep_disable: %s\n", _ep->name); dprintk(DEBUG_NORMAL, "ep_disable: %s\n", _ep->name);
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->halted = 1; ep->halted = 1;
s3c2410_udc_nuke (ep->dev, ep, -ESHUTDOWN); s3c2410_udc_nuke (ep->dev, ep, -ESHUTDOWN);
...@@ -1630,6 +1631,7 @@ static void s3c2410_udc_reinit(struct s3c2410_udc *dev) ...@@ -1630,6 +1631,7 @@ static void s3c2410_udc_reinit(struct s3c2410_udc *dev)
ep->dev = dev; ep->dev = dev;
ep->desc = NULL; ep->desc = NULL;
ep->ep.desc = NULL;
ep->halted = 0; ep->halted = 0;
INIT_LIST_HEAD (&ep->queue); INIT_LIST_HEAD (&ep->queue);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment