|
@@ -112,18 +112,20 @@ void xhci_ring_free(struct xhci_hcd *xhci, struct xhci_ring *ring)
|
|
|
struct xhci_segment *seg;
|
|
|
struct xhci_segment *first_seg;
|
|
|
|
|
|
- if (!ring || !ring->first_seg)
|
|
|
+ if (!ring)
|
|
|
return;
|
|
|
- first_seg = ring->first_seg;
|
|
|
- seg = first_seg->next;
|
|
|
- xhci_dbg(xhci, "Freeing ring at %p\n", ring);
|
|
|
- while (seg != first_seg) {
|
|
|
- struct xhci_segment *next = seg->next;
|
|
|
- xhci_segment_free(xhci, seg);
|
|
|
- seg = next;
|
|
|
+ if (ring->first_seg) {
|
|
|
+ first_seg = ring->first_seg;
|
|
|
+ seg = first_seg->next;
|
|
|
+ xhci_dbg(xhci, "Freeing ring at %p\n", ring);
|
|
|
+ while (seg != first_seg) {
|
|
|
+ struct xhci_segment *next = seg->next;
|
|
|
+ xhci_segment_free(xhci, seg);
|
|
|
+ seg = next;
|
|
|
+ }
|
|
|
+ xhci_segment_free(xhci, first_seg);
|
|
|
+ ring->first_seg = NULL;
|
|
|
}
|
|
|
- xhci_segment_free(xhci, first_seg);
|
|
|
- ring->first_seg = NULL;
|
|
|
kfree(ring);
|
|
|
}
|
|
|
|