From 38b221957b155ef410bdc28856a66386303fbd5a Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Sun, 6 Jul 2008 20:48:41 -0700 Subject: [PATCH] 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 Acked-by: Jeff Garzik Signed-off-by: David S. Miller --- drivers/net/e1000/e1000_main.c | 12 ++++-------- drivers/net/e1000e/netdev.c | 3 +-- drivers/net/igb/igb_main.c | 3 +-- drivers/net/ixgb/ixgb_main.c | 6 ++---- drivers/net/starfire.c | 2 +- drivers/net/tehuti.c | 2 +- drivers/net/tehuti.h | 1 + 7 files changed, 11 insertions(+), 18 deletions(-) diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 311ca266bd77..7aa458f7d8b8 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -4277,8 +4277,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, if (unlikely(adapter->vlgrp && (status & E1000_RXD_STAT_VP))) { vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->special) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(rx_desc->special)); } else { netif_receive_skb(skb); } @@ -4286,8 +4285,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, if (unlikely(adapter->vlgrp && (status & E1000_RXD_STAT_VP))) { vlan_hwaccel_rx(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->special) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(rx_desc->special)); } else { netif_rx(skb); } @@ -4464,16 +4462,14 @@ copydone: #ifdef CONFIG_E1000_NAPI if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->wb.middle.vlan) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(rx_desc->wb.middle.vlan)); } else { netif_receive_skb(skb); } #else /* CONFIG_E1000_NAPI */ if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { vlan_hwaccel_rx(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->wb.middle.vlan) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(rx_desc->wb.middle.vlan)); } else { netif_rx(skb); } diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index acdd616c96f6..80592bdbe31e 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c @@ -98,8 +98,7 @@ static void e1000_receive_skb(struct e1000_adapter *adapter, if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(vlan) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(vlan)); else netif_receive_skb(skb); diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 7bc6fae182a7..afd4ce3f7b53 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c @@ -3391,8 +3391,7 @@ static void igb_receive_skb(struct igb_adapter *adapter, u8 status, __le16 vlan, { if (adapter->vlgrp && (status & E1000_RXD_STAT_VP)) vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(vlan) & - E1000_RXD_SPC_VLAN_MASK); + le16_to_cpu(vlan)); else netif_receive_skb(skb); } diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index cb8daddafa29..41f3adf5f375 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -2045,16 +2045,14 @@ ixgb_clean_rx_irq(struct ixgb_adapter *adapter) #ifdef CONFIG_IXGB_NAPI if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) { vlan_hwaccel_receive_skb(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->special) & - IXGB_RX_DESC_SPECIAL_VLAN_MASK); + le16_to_cpu(rx_desc->special)); } else { netif_receive_skb(skb); } #else /* CONFIG_IXGB_NAPI */ if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) { vlan_hwaccel_rx(skb, adapter->vlgrp, - le16_to_cpu(rx_desc->special) & - IXGB_RX_DESC_SPECIAL_VLAN_MASK); + le16_to_cpu(rx_desc->special)); } else { netif_rx(skb); } diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 7b7b1717b0d1..2038f38dc04b 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -1510,7 +1510,7 @@ static int __netdev_rx(struct net_device *dev, int *quota) if (debug > 4) printk(KERN_DEBUG " netdev_rx() vlanid = %d\n", le16_to_cpu(desc->vlanid)); /* vlan_netdev_receive_skb() expects a packet with the VLAN tag stripped out */ - vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid) & VLAN_VID_MASK); + vlan_netdev_receive_skb(skb, np->vlgrp, le16_to_cpu(desc->vlanid)); } else #endif /* VLAN_SUPPORT */ netdev_receive_skb(skb); diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c index 432e837a1760..91f9054a1d95 100644 --- a/drivers/net/tehuti.c +++ b/drivers/net/tehuti.c @@ -1165,7 +1165,7 @@ NETIF_RX_MUX(struct bdx_priv *priv, u32 rxd_val1, u16 rxd_vlan, GET_RXD_VLAN_ID(rxd_vlan))->name); /* NAPI variant of receive functions */ vlan_hwaccel_receive_skb(skb, priv->vlgrp, - GET_RXD_VLAN_ID(rxd_vlan)); + GET_RXD_VLAN_TCI(rxd_vlan)); } else { netif_receive_skb(skb); } diff --git a/drivers/net/tehuti.h b/drivers/net/tehuti.h index efd170f451b4..c66dfc9ec1ec 100644 --- a/drivers/net/tehuti.h +++ b/drivers/net/tehuti.h @@ -309,6 +309,7 @@ struct rxf_desc { #define GET_RXD_PKT_ID(x) GET_BITS_SHIFT((x), 3, 28) #define GET_RXD_VTAG(x) GET_BITS_SHIFT((x), 1, 31) #define GET_RXD_VLAN_ID(x) GET_BITS_SHIFT((x), 12, 0) +#define GET_RXD_VLAN_TCI(x) GET_BITS_SHIFT((x), 16, 0) #define GET_RXD_CFI(x) GET_BITS_SHIFT((x), 1, 12) #define GET_RXD_PRIO(x) GET_BITS_SHIFT((x), 3, 13) -- 2.30.2