• Felipe Balbi's avatar
    usb: gadget: composite: conditionally dequeue os_desc and setup requests · a7c12eaf
    Felipe Balbi authored
    In case we unload a gadget driver while any of
    os_desc_req or req are still pending, we need
    to make sure to dequeue them.
    
    By using our setup_pending and os_desc_pending
    flags we achieve that in a way that doesn't
    cause any regressions because we won't dequeue
    a request which was already completed.
    
    The original idea came from Li Jun's commit
    f2267089
    (usb: gadget: composite: dequeue cdev->req
    before free it in composite_dev_cleanup) which,
    unfortunately, caused two regressions (kfree()
    being called before usb_ep_dequeue() and calling
    usb_ep_dequeue() when the request was already
    completed). That commit also didn't take care
    of os_desc_req which can fall into the same
    situation so we must care for that one too.
    
    Note that in order to make code slightly easier
    to read, we introduce composite_ep_queue() which
    hides details about how to fiddle with our pending
    flags.
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    a7c12eaf
composite.c 59.7 KB