• Jack Pham's avatar
    usb: dwc3: gadget: only unmap requests from DMA if mapped · 4a71fcb8
    Jack Pham authored
    A recent optimization was made so that a request put on the
    pending_list wouldn't get mapped for DMA until just before
    preparing a TRB for it. However, this poses a problem in case
    the request is dequeued or the endpoint is disabled before the
    mapping is done as that would lead to dwc3_gadget_giveback()
    unconditionally calling usb_gadget_unmap_request_for_dev() with
    an invalid request->dma handle. Depending on the platform's DMA
    implementation the unmap operation could result in a panic.
    
    Since we know a successful mapping is a prerequisite for getting
    a TRB, the unmap can be conditionally called only when req->trb
    is non-NULL.
    
    Fixes: cdb55b39 ("usb: dwc3: gadget: lazily map requests for DMA")
    Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
    Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    4a71fcb8
gadget.c 82 KB