lkml.org 
[lkml]   [2013]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[101/141] usb: dwc3: gadget: free trb pool only from epnum 2
    3.6.11.6 stable review patch.
    If anyone has any objections, please let me know.

    ------------------

    From: George Cherian <george.cherian@ti.com>

    [ Upstream commit 5bf8fae33d14cc5c3c53a926f9079f92c8b082b0 ]

    we never allocate a TRB pool for physical endpoints
    0 and 1 so trying to free it (a invalid TRB pool pointer)
    will lead us in a warning while removing dwc3.ko module.

    In order to fix the situation, all we have to do is skip
    dwc3_free_trb_pool() for physical endpoints 0 and 1 just
    as we while deleting endpoints from the endpoints list.

    Cc: stable@vger.kernel.org
    Signed-off-by: George Cherian <george.cherian@ti.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    drivers/usb/dwc3/gadget.c | 17 ++++++++++++++---
    1 file changed, 14 insertions(+), 3 deletions(-)

    diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
    index eb0fd10..8212dbb 100644
    --- a/drivers/usb/dwc3/gadget.c
    +++ b/drivers/usb/dwc3/gadget.c
    @@ -1650,10 +1650,21 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)

    for (epnum = 0; epnum < DWC3_ENDPOINTS_NUM; epnum++) {
    dep = dwc->eps[epnum];
    - dwc3_free_trb_pool(dep);
    -
    - if (epnum != 0 && epnum != 1)
    + if (!dep)
    + continue;
    + /*
    + * Physical endpoints 0 and 1 are special; they form the
    + * bi-directional USB endpoint 0.
    + *
    + * For those two physical endpoints, we don't allocate a TRB
    + * pool nor do we add them the endpoints list. Due to that, we
    + * shouldn't do these two operations otherwise we would end up
    + * with all sorts of bugs when removing dwc3.ko.
    + */
    + if (epnum != 0 && epnum != 1) {
    + dwc3_free_trb_pool(dep);
    list_del(&dep->endpoint.ep_list);
    + }

    kfree(dep);
    }
    --
    1.7.10.4



    \
     
     \ /
      Last update: 2013-07-04 00:21    [W:4.108 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site