| From 68e41c5d032668e2905404afbef75bc58be179d6 Mon Sep 17 00:00:00 2001 |
| From: Paul Zimmerman <Paul.Zimmerman@synopsys.com> |
| Date: Sat, 12 Feb 2011 14:06:06 -0800 |
| Subject: xhci: Avoid BUG() in interrupt context |
| |
| From: Paul Zimmerman <Paul.Zimmerman@synopsys.com> |
| |
| commit 68e41c5d032668e2905404afbef75bc58be179d6 upstream. |
| |
| Change the BUGs in xhci_find_new_dequeue_state() to WARN_ONs, to avoid |
| bringing down the box if one of them is hit |
| |
| This patch should be queued for stable kernels back to 2.6.31. |
| |
| Signed-off-by: Paul Zimmerman <paulz@synopsys.com> |
| Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/host/xhci-ring.c | 13 +++++++++---- |
| 1 file changed, 9 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/host/xhci-ring.c |
| +++ b/drivers/usb/host/xhci-ring.c |
| @@ -391,8 +391,11 @@ void xhci_find_new_dequeue_state(struct |
| state->new_deq_seg = find_trb_seg(cur_td->start_seg, |
| dev->eps[ep_index].stopped_trb, |
| &state->new_cycle_state); |
| - if (!state->new_deq_seg) |
| - BUG(); |
| + if (!state->new_deq_seg) { |
| + WARN_ON(1); |
| + return; |
| + } |
| + |
| /* Dig out the cycle state saved by the xHC during the stop ep cmd */ |
| xhci_dbg(xhci, "Finding endpoint context\n"); |
| ep_ctx = xhci_get_ep_ctx(xhci, dev->out_ctx, ep_index); |
| @@ -403,8 +406,10 @@ void xhci_find_new_dequeue_state(struct |
| state->new_deq_seg = find_trb_seg(state->new_deq_seg, |
| state->new_deq_ptr, |
| &state->new_cycle_state); |
| - if (!state->new_deq_seg) |
| - BUG(); |
| + if (!state->new_deq_seg) { |
| + WARN_ON(1); |
| + return; |
| + } |
| |
| trb = &state->new_deq_ptr->generic; |
| if ((trb->field[3] & TRB_TYPE_BITMASK) == TRB_TYPE(TRB_LINK) && |