summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Chen <peter.chen@freescale.com>2013-09-17 12:37:24 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-25 17:30:36 -0700
commite7ef5265b158ac1975b1556511e2b11bad5f5522 (patch)
tree9308359c82db79fba07b2d17918b2cfc8eede664
parent3a254fea70f402859b92a9cd4299ee5de3bbc2f6 (diff)
downloadlinux-e7ef5265b158ac1975b1556511e2b11bad5f5522.tar.gz
linux-e7ef5265b158ac1975b1556511e2b11bad5f5522.tar.bz2
linux-e7ef5265b158ac1975b1556511e2b11bad5f5522.zip
usb: chipidea: udc: free pending TD at removal procedure
There is a pending TD which is not freed after request finishes, we do this due to a controller bug. This TD needs to be freed when the driver is removed. It prints below error message when unload chipidea driver at current code: "ci_hdrc ci_hdrc.0: dma_pool_destroy ci_hw_td, b0001000 busy" It indicates the buffer at dma pool are still in use. This commit will free the pending TD at driver's removal procedure, it can fix the problem described above. Acked-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Signed-off-by: Peter Chen <peter.chen@freescale.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/chipidea/udc.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 5280454fb2a7..9333083dd111 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1600,6 +1600,8 @@ static void destroy_eps(struct ci_hdrc *ci)
for (i = 0; i < ci->hw_ep_max; i++) {
struct ci_hw_ep *hwep = &ci->ci_hw_ep[i];
+ if (hwep->pending_td)
+ free_pending_td(hwep);
dma_pool_free(ci->qh_pool, hwep->qh.ptr, hwep->qh.dma);
}
}