|
@@ -2001,6 +2001,25 @@ static int rtl_start_rx(struct r8152 *tp)
|
|
|
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;
|
|
|
}
|
|
|
|