int ep_index;
        struct urb *urb = NULL;
        struct xhci_ep_ctx *ep_ctx;
-       int ret = 0;
        struct urb_priv *urb_priv;
        u32 trb_comp_code;
 
        urb_priv->td_cnt++;
        /* Giveback the urb when all the tds are completed */
        if (urb_priv->td_cnt == urb_priv->length) {
-               ret = 1;
                if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
                        xhci_to_hcd(xhci)->self.bandwidth_isoc_reqs--;
                        if (xhci_to_hcd(xhci)->self.bandwidth_isoc_reqs == 0) {
                                        usb_amd_quirk_pll_enable();
                        }
                }
+               xhci_giveback_urb_locked(xhci, td, *status);
        }
 
-       return ret;
+       return 0;
 }
 
 /* sum trb lengths from ring dequeue up to stop_trb, _excluding_ stop_trb */
        struct xhci_ep_ctx *ep_ctx;
        struct list_head *tmp;
        u32 trb_comp_code;
-       int ret = 0;
        int td_num = 0;
        bool handling_skipped_tds = false;
 
                                xhci_dbg(xhci, "td_list is empty while skip "
                                                "flag set. Clear skip flag.\n");
                        }
-                       ret = 0;
                        goto cleanup;
                }
 
                        ep->skip = false;
                        xhci_dbg(xhci, "All tds on the ep_ring skipped. "
                                                "Clear skip flag.\n");
-                       ret = 0;
                        goto cleanup;
                }
 
                 */
                if (!ep_seg && (trb_comp_code == COMP_STOP ||
                                   trb_comp_code == COMP_STOP_INVAL)) {
-                       ret = 0;
                        goto cleanup;
                }
 
                                if ((xhci->quirks & XHCI_SPURIOUS_SUCCESS) &&
                                                ep_ring->last_td_was_short) {
                                        ep_ring->last_td_was_short = false;
-                                       ret = 0;
                                        goto cleanup;
                                }
                                /* HC is busted, give up! */
                                return -ESHUTDOWN;
                        }
 
-                       ret = skip_isoc_td(xhci, td, event, ep, &status);
+                       skip_isoc_td(xhci, td, event, ep, &status);
                        goto cleanup;
                }
                if (trb_comp_code == COMP_SHORT_TX)
                        goto cleanup;
                }
 
-               /* Now update the urb's actual_length and give back to
-                * the core
-                */
+               /* update the urb's actual_length and give back to the core */
                if (usb_endpoint_xfer_control(&td->urb->ep->desc))
-                       ret = process_ctrl_td(xhci, td, ep_trb, event, ep,
-                                                &status);
+                       process_ctrl_td(xhci, td, ep_trb, event, ep, &status);
                else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc))
-                       ret = process_isoc_td(xhci, td, ep_trb, event, ep,
-                                                &status);
+                       process_isoc_td(xhci, td, ep_trb, event, ep, &status);
                else
-                       ret = process_bulk_intr_td(xhci, td, ep_trb, event,
-                                                ep, &status);
-
+                       process_bulk_intr_td(xhci, td, ep_trb, event, ep,
+                                            &status);
 cleanup:
-
-
                handling_skipped_tds = ep->skip &&
                        trb_comp_code != COMP_MISSED_INT &&
                        trb_comp_code != COMP_PING_ERR;
                if (!handling_skipped_tds)
                        inc_deq(xhci, xhci->event_ring);
 
-               if (ret)
-                       xhci_giveback_urb_locked(xhci, td, status);
        /*
         * If ep->skip is set, it means there are missed tds on the
         * endpoint ring need to take care of.