diff options
Diffstat (limited to 'drivers/usb/host/xhci-mem.c')
| -rw-r--r-- | drivers/usb/host/xhci-mem.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 487bc083dead..fb51c7085ad0 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -205,7 +205,12 @@ static int xhci_alloc_segments_for_ring(struct xhci_hcd *xhci,  		next = xhci_segment_alloc(xhci, cycle_state, flags);  		if (!next) { -			xhci_free_segments_for_ring(xhci, *first); +			prev = *first; +			while (prev) { +				next = prev->next; +				xhci_segment_free(xhci, prev); +				prev = next; +			}  			return -ENOMEM;  		}  		xhci_link_segments(xhci, prev, next, type); @@ -258,7 +263,7 @@ static struct xhci_ring *xhci_ring_alloc(struct xhci_hcd *xhci,  	return ring;  fail: -	xhci_ring_free(xhci, ring); +	kfree(ring);  	return NULL;  } |