r8152: adjust rtl_start_rx
If there is a error for r8152_submit_rx(), add the remaining rx buffers to the list. Then the remaining rx buffers could be submitted later. Signed-off-by: Hayes Wang <hayeswang@realtek.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a0fccd4860
commit
7bcf4f605b
1 changed files with 19 additions and 0 deletions
|
@ -2001,6 +2001,25 @@ static int rtl_start_rx(struct r8152 *tp)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret && ++i < RTL8152_MAX_RX) {
|
||||||
|
struct list_head rx_queue;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&rx_queue);
|
||||||
|
|
||||||
|
do {
|
||||||
|
struct rx_agg *agg = &tp->rx_info[i++];
|
||||||
|
struct urb *urb = agg->urb;
|
||||||
|
|
||||||
|
urb->actual_length = 0;
|
||||||
|
list_add_tail(&agg->list, &rx_queue);
|
||||||
|
} while (i < RTL8152_MAX_RX);
|
||||||
|
|
||||||
|
spin_lock_irqsave(&tp->rx_lock, flags);
|
||||||
|
list_splice_tail(&rx_queue, &tp->rx_done);
|
||||||
|
spin_unlock_irqrestore(&tp->rx_lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue