gadget: f_thor: fix hang-up with ctrl-c
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Mon, 4 Jun 2018 06:30:30 +0000 (15:30 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Mon, 21 Jan 2019 07:26:19 +0000 (16:26 +0900)
After the commit 6aae84769a0b ("gadget: f_thor: Fix memory leaks of
usb request and its buffer"), there is hang-up with ctrl-c in some
udc. It is because req of out_ep is freed before out_ep is disabled.
Fix hang-up with ctrl-c by disabling ep before free req of the ep.

Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
[sw0312.kim: cherry-pick from mainline
 - dwc2 case, it did not hang-up, but there is delay]

Change-Id: I123119e62b219d578fba1d42b7327d765424466c

drivers/usb/gadget/f_thor.c

index a34e8ad492a53b959c2e3e49a272637e20412776..abf53a34c019bb1f631062ac51341778330e4c0e 100644 (file)
@@ -884,14 +884,14 @@ static void thor_func_disable(struct usb_function *f)
 
        /* Avoid freeing memory when ep is still claimed */
        if (dev->in_ep->driver_data) {
-               free_ep_req(dev->in_ep, dev->in_req);
                usb_ep_disable(dev->in_ep);
+               free_ep_req(dev->in_ep, dev->in_req);
                dev->in_ep->driver_data = NULL;
        }
 
        if (dev->out_ep->driver_data) {
-               usb_ep_free_request(dev->out_ep, dev->out_req);
                usb_ep_disable(dev->out_ep);
+               usb_ep_free_request(dev->out_ep, dev->out_req);
                dev->out_ep->driver_data = NULL;
        }