aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/r8169.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/r8169.c')
-rw-r--r--drivers/net/r8169.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 56a11e29af0b..54900332f12d 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1076,7 +1076,12 @@ static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
1076 int ret; 1076 int ret;
1077 1077
1078 if (vlgrp && (opts2 & RxVlanTag)) { 1078 if (vlgrp && (opts2 & RxVlanTag)) {
1079 __vlan_hwaccel_rx(skb, vlgrp, swab16(opts2 & 0xffff), polling); 1079 u16 vtag = swab16(opts2 & 0xffff);
1080
1081 if (likely(polling))
1082 vlan_gro_receive(&tp->napi, vlgrp, vtag, skb);
1083 else
1084 __vlan_hwaccel_rx(skb, vlgrp, vtag, polling);
1080 ret = 0; 1085 ret = 0;
1081 } else 1086 } else
1082 ret = -1; 1087 ret = -1;
@@ -3186,6 +3191,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
3186#ifdef CONFIG_R8169_VLAN 3191#ifdef CONFIG_R8169_VLAN
3187 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 3192 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
3188#endif 3193#endif
3194 dev->features |= NETIF_F_GRO;
3189 3195
3190 tp->intr_mask = 0xffff; 3196 tp->intr_mask = 0xffff;
3191 tp->align = cfg->align; 3197 tp->align = cfg->align;
@@ -4561,7 +4567,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev,
4561 4567
4562 if (rtl8169_rx_vlan_skb(tp, desc, skb, polling) < 0) { 4568 if (rtl8169_rx_vlan_skb(tp, desc, skb, polling) < 0) {
4563 if (likely(polling)) 4569 if (likely(polling))
4564 netif_receive_skb(skb); 4570 napi_gro_receive(&tp->napi, skb);
4565 else 4571 else
4566 netif_rx(skb); 4572 netif_rx(skb);
4567 } 4573 }