diff options
Diffstat (limited to 'drivers/usb/dwc2/hcd_queue.c')
| -rw-r--r-- | drivers/usb/dwc2/hcd_queue.c | 18 | 
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c index bb97838bc6c0..9b5c36256627 100644 --- a/drivers/usb/dwc2/hcd_queue.c +++ b/drivers/usb/dwc2/hcd_queue.c @@ -229,11 +229,13 @@ static struct dwc2_qh *dwc2_hcd_qh_create(struct dwc2_hsotg *hsotg,   */  void dwc2_hcd_qh_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)  { -	if (hsotg->core_params->dma_desc_enable > 0) +	if (hsotg->core_params->dma_desc_enable > 0) {  		dwc2_hcd_qh_free_ddma(hsotg, qh); -	else if (qh->dw_align_buf) -		dma_free_coherent(hsotg->dev, qh->dw_align_buf_size, -				  qh->dw_align_buf, qh->dw_align_buf_dma); +	} else { +		/* kfree(NULL) is safe */ +		kfree(qh->dw_align_buf); +		qh->dw_align_buf_dma = (dma_addr_t)0; +	}  	kfree(qh);  } @@ -761,6 +763,7 @@ void dwc2_hcd_qtd_init(struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)  /**   * dwc2_hcd_qtd_add() - Adds a QTD to the QTD-list of a QH + *			Caller must hold driver lock.   *   * @hsotg:        The DWC HCD structure   * @qtd:          The QTD to add @@ -777,7 +780,6 @@ int dwc2_hcd_qtd_add(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd,  		     struct dwc2_qh **qh, gfp_t mem_flags)  {  	struct dwc2_hcd_urb *urb = qtd->urb; -	unsigned long flags;  	int allocated = 0;  	int retval; @@ -792,15 +794,12 @@ int dwc2_hcd_qtd_add(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd,  		allocated = 1;  	} -	spin_lock_irqsave(&hsotg->lock, flags); -  	retval = dwc2_hcd_qh_add(hsotg, *qh);  	if (retval)  		goto fail;  	qtd->qh = *qh;  	list_add_tail(&qtd->qtd_list_entry, &(*qh)->qtd_list); -	spin_unlock_irqrestore(&hsotg->lock, flags);  	return 0; @@ -817,10 +816,7 @@ fail:  					 qtd_list_entry)  			dwc2_hcd_qtd_unlink_and_free(hsotg, qtd2, qh_tmp); -		spin_unlock_irqrestore(&hsotg->lock, flags);  		dwc2_hcd_qh_free(hsotg, qh_tmp); -	} else { -		spin_unlock_irqrestore(&hsotg->lock, flags);  	}  	return retval;  |