From 2e790019ff75e9a2317b928ed9a70a57cbf46856 Mon Sep 17 00:00:00 2001 From: Sarah Sharp Date: Tue, 3 Nov 2009 22:02:24 -0800 Subject: [PATCH] --- yaml --- r: 168715 b: refs/heads/master c: 2fa88daa6f299bfb83672c3b525d786ad03b4735 h: refs/heads/master i: 168713: 7b43bbe394224961f90300530910ad20ca43fe87 168711: d0ab04b39c4d6b551f66ee479351c9457231c622 v: v3 --- [refs] | 2 +- trunk/drivers/usb/host/xhci-ring.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 7080508fd1f7..1dd4e252b44e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d94c05e33d9212ee67b8d4998f984cc71df8168b +refs/heads/master: 2fa88daa6f299bfb83672c3b525d786ad03b4735 diff --git a/trunk/drivers/usb/host/xhci-ring.c b/trunk/drivers/usb/host/xhci-ring.c index 173c39c76489..821b7b4709de 100644 --- a/trunk/drivers/usb/host/xhci-ring.c +++ b/trunk/drivers/usb/host/xhci-ring.c @@ -864,9 +864,11 @@ static struct xhci_segment *trb_in_td( cur_seg = start_seg; do { + if (start_dma == 0) + return 0; /* We may get an event for a Link TRB in the middle of a TD */ end_seg_dma = xhci_trb_virt_to_dma(cur_seg, - &start_seg->trbs[TRBS_PER_SEGMENT - 1]); + &cur_seg->trbs[TRBS_PER_SEGMENT - 1]); /* If the end TRB isn't in this segment, this is set to 0 */ end_trb_dma = xhci_trb_virt_to_dma(cur_seg, end_trb); @@ -893,8 +895,9 @@ static struct xhci_segment *trb_in_td( } cur_seg = cur_seg->next; start_dma = xhci_trb_virt_to_dma(cur_seg, &cur_seg->trbs[0]); - } while (1); + } while (cur_seg != start_seg); + return 0; } /*