Commit 38b221957b155ef410bdc28856a66386303fbd5a

Authored by Patrick McHardy
Committed by David S. Miller
1 parent 4b5a698ef4

netdrv: don't truncate VLAN TCI with VLAN stripping

The vlan_hwaccel_{rx,receive_skb} functions expect the full TCI field
for priority mappings, don't truncate the upper 4 bits.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Acked-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 7 changed files with 11 additions and 18 deletions Side-by-side Diff

drivers/net/e1000/e1000_main.c
... ... @@ -4277,8 +4277,7 @@
4277 4277 if (unlikely(adapter->vlgrp &&
4278 4278 (status & E1000_RXD_STAT_VP))) {
4279 4279 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
4280   - le16_to_cpu(rx_desc->special) &
4281   - E1000_RXD_SPC_VLAN_MASK);
  4280 + le16_to_cpu(rx_desc->special));
4282 4281 } else {
4283 4282 netif_receive_skb(skb);
4284 4283 }
... ... @@ -4286,8 +4285,7 @@
4286 4285 if (unlikely(adapter->vlgrp &&
4287 4286 (status & E1000_RXD_STAT_VP))) {
4288 4287 vlan_hwaccel_rx(skb, adapter->vlgrp,
4289   - le16_to_cpu(rx_desc->special) &
4290   - E1000_RXD_SPC_VLAN_MASK);
  4288 + le16_to_cpu(rx_desc->special));
4291 4289 } else {
4292 4290 netif_rx(skb);
4293 4291 }
4294 4292  
... ... @@ -4464,16 +4462,14 @@
4464 4462 #ifdef CONFIG_E1000_NAPI
4465 4463 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
4466 4464 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
4467   - le16_to_cpu(rx_desc->wb.middle.vlan) &
4468   - E1000_RXD_SPC_VLAN_MASK);
  4465 + le16_to_cpu(rx_desc->wb.middle.vlan));
4469 4466 } else {
4470 4467 netif_receive_skb(skb);
4471 4468 }
4472 4469 #else /* CONFIG_E1000_NAPI */
4473 4470 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
4474 4471 vlan_hwaccel_rx(skb, adapter->vlgrp,
4475   - le16_to_cpu(rx_desc->wb.middle.vlan) &
4476   - E1000_RXD_SPC_VLAN_MASK);
  4472 + le16_to_cpu(rx_desc->wb.middle.vlan));
4477 4473 } else {
4478 4474 netif_rx(skb);
4479 4475 }
drivers/net/e1000e/netdev.c
... ... @@ -98,8 +98,7 @@
98 98  
99 99 if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
100 100 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
101   - le16_to_cpu(vlan) &
102   - E1000_RXD_SPC_VLAN_MASK);
  101 + le16_to_cpu(vlan));
103 102 else
104 103 netif_receive_skb(skb);
105 104  
drivers/net/igb/igb_main.c
... ... @@ -3391,8 +3391,7 @@
3391 3391 {
3392 3392 if (adapter->vlgrp && (status & E1000_RXD_STAT_VP))
3393 3393 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
3394   - le16_to_cpu(vlan) &
3395   - E1000_RXD_SPC_VLAN_MASK);
  3394 + le16_to_cpu(vlan));
3396 3395 else
3397 3396 netif_receive_skb(skb);
3398 3397 }
drivers/net/ixgb/ixgb_main.c
... ... @@ -2045,16 +2045,14 @@
2045 2045 #ifdef CONFIG_IXGB_NAPI
2046 2046 if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
2047 2047 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
2048   - le16_to_cpu(rx_desc->special) &
2049   - IXGB_RX_DESC_SPECIAL_VLAN_MASK);
  2048 + le16_to_cpu(rx_desc->special));
2050 2049 } else {
2051 2050 netif_receive_skb(skb);
2052 2051 }
2053 2052 #else /* CONFIG_IXGB_NAPI */
2054 2053 if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
2055 2054 vlan_hwaccel_rx(skb, adapter->vlgrp,
2056   - le16_to_cpu(rx_desc->special) &
2057   - IXGB_RX_DESC_SPECIAL_VLAN_MASK);
  2055 + le16_to_cpu(rx_desc->special));
2058 2056 } else {
2059 2057 netif_rx(skb);
2060 2058 }
drivers/net/starfire.c
... ... @@ -1510,7 +1510,7 @@
1510 1510 if (debug > 4)
1511 1511 printk(KERN_DEBUG " netdev_rx() vlanid = %d\n", le16_to_cpu(desc->vlanid));
1512 1512 /* vlan_netdev_receive_skb() expects a packet with the VLAN tag stripped out */
1513   - vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid) & VLAN_VID_MASK);
  1513 + vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid));
1514 1514 } else
1515 1515 #endif /* VLAN_SUPPORT */
1516 1516 netdev_receive_skb(skb);
drivers/net/tehuti.c
... ... @@ -1165,7 +1165,7 @@
1165 1165 GET_RXD_VLAN_ID(rxd_vlan))->name);
1166 1166 /* NAPI variant of receive functions */
1167 1167 vlan_hwaccel_receive_skb(skb, priv->vlgrp,
1168   - GET_RXD_VLAN_ID(rxd_vlan));
  1168 + GET_RXD_VLAN_TCI(rxd_vlan));
1169 1169 } else {
1170 1170 netif_receive_skb(skb);
1171 1171 }
drivers/net/tehuti.h
... ... @@ -309,6 +309,7 @@
309 309 #define GET_RXD_PKT_ID(x) GET_BITS_SHIFT((x), 3, 28)
310 310 #define GET_RXD_VTAG(x) GET_BITS_SHIFT((x), 1, 31)
311 311 #define GET_RXD_VLAN_ID(x) GET_BITS_SHIFT((x), 12, 0)
  312 +#define GET_RXD_VLAN_TCI(x) GET_BITS_SHIFT((x), 16, 0)
312 313 #define GET_RXD_CFI(x) GET_BITS_SHIFT((x), 1, 12)
313 314 #define GET_RXD_PRIO(x) GET_BITS_SHIFT((x), 3, 13)
314 315