mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
usb: dwc2: gadget: fix fifo allocation leak
When selecting different alt setting, s3c_hsotg_ep_enable can be called with fifo already allocated. Allocate fifo again only if required and after deallocating the previous fifo. Tested-by: Robert Baldyga <r.baldyga@samsung.com> Acked-by: Paul Zimmerman <paulz@synopsys.com> Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
ca4c55ad89
commit
4556e12c9c
@ -2528,11 +2528,22 @@ static int s3c_hsotg_ep_enable(struct usb_ep *ep,
|
||||
break;
|
||||
}
|
||||
|
||||
/* If fifo is already allocated for this ep */
|
||||
if (hs_ep->fifo_index) {
|
||||
size = hs_ep->ep.maxpacket * hs_ep->mc;
|
||||
/* If bigger fifo is required deallocate current one */
|
||||
if (size > hs_ep->fifo_size) {
|
||||
hsotg->fifo_map &= ~(1 << hs_ep->fifo_index);
|
||||
hs_ep->fifo_index = 0;
|
||||
hs_ep->fifo_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* if the hardware has dedicated fifos, we must give each IN EP
|
||||
* a unique tx-fifo even if it is non-periodic.
|
||||
*/
|
||||
if (dir_in && hsotg->dedicated_fifos) {
|
||||
if (dir_in && hsotg->dedicated_fifos && !hs_ep->fifo_index) {
|
||||
u32 fifo_index = 0;
|
||||
u32 fifo_size = UINT_MAX;
|
||||
size = hs_ep->ep.maxpacket*hs_ep->mc;
|
||||
|
Loading…
Reference in New Issue
Block a user