summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/usb/r8152.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 4dee76b..0a88f64 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1133,25 +1133,19 @@ r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, struct sk_buff *skb)
static void rx_bottom(struct r8152 *tp)
{
- struct net_device_stats *stats;
- struct net_device *netdev;
- struct rx_agg *agg;
- struct rx_desc *rx_desc;
unsigned long flags;
struct list_head *cursor, *next;
- struct sk_buff *skb;
- struct urb *urb;
- unsigned pkt_len;
- int len_used;
- u8 *rx_data;
- int ret;
-
- netdev = tp->netdev;
-
- stats = rtl8152_get_stats(netdev);
spin_lock_irqsave(&tp->rx_lock, flags);
list_for_each_safe(cursor, next, &tp->rx_done) {
+ struct rx_desc *rx_desc;
+ struct rx_agg *agg;
+ unsigned pkt_len;
+ int len_used = 0;
+ struct urb *urb;
+ u8 *rx_data;
+ int ret;
+
list_del_init(cursor);
spin_unlock_irqrestore(&tp->rx_lock, flags);
@@ -1160,16 +1154,21 @@ static void rx_bottom(struct r8152 *tp)
if (urb->actual_length < ETH_ZLEN)
goto submit;
- len_used = 0;
rx_desc = agg->head;
rx_data = agg->head;
pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK;
len_used += sizeof(struct rx_desc) + pkt_len;
while (urb->actual_length >= len_used) {
+ struct net_device *netdev = tp->netdev;
+ struct net_device_stats *stats;
+ struct sk_buff *skb;
+
if (pkt_len < ETH_ZLEN)
break;
+ stats = rtl8152_get_stats(netdev);
+
pkt_len -= 4; /* CRC */
rx_data += sizeof(struct rx_desc);