diff options
author | Ivan Vecera <ivecera@redhat.com> | 2015-02-26 08:48:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-01 23:25:51 -0500 |
commit | 26caa3469a2de617d95c29371571a9585603a023 (patch) | |
tree | 7cba05cc5db78e1d90fcf2820d0ff77d4155fb9b /drivers/net/ethernet/broadcom/bnx2.c | |
parent | ea373041bdfa0e580f09a9fbe6633cba62439430 (diff) |
bnx2: disable toggling of rxvlan if necessary
The bnx2 driver uses .ndo_fix_features to force enable of Rx VLAN tag
stripping when the card cannot disable it. The driver should remove
NETIF_F_HW_VLAN_CTAG_RX flag from hw_features instead so it is fixed
for the ethtool.
Cc: Sony Chacko <sony.chacko@qlogic.com>
Cc: Dept-HSGLinuxNICDev@qlogic.com
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c index 9f146b990c01..2b66ef3d8217 100644 --- a/drivers/net/ethernet/broadcom/bnx2.c +++ b/drivers/net/ethernet/broadcom/bnx2.c | |||
@@ -7708,17 +7708,6 @@ bnx2_set_phys_id(struct net_device *dev, enum ethtool_phys_id_state state) | |||
7708 | return 0; | 7708 | return 0; |
7709 | } | 7709 | } |
7710 | 7710 | ||
7711 | static netdev_features_t | ||
7712 | bnx2_fix_features(struct net_device *dev, netdev_features_t features) | ||
7713 | { | ||
7714 | struct bnx2 *bp = netdev_priv(dev); | ||
7715 | |||
7716 | if (!(bp->flags & BNX2_FLAG_CAN_KEEP_VLAN)) | ||
7717 | features |= NETIF_F_HW_VLAN_CTAG_RX; | ||
7718 | |||
7719 | return features; | ||
7720 | } | ||
7721 | |||
7722 | static int | 7711 | static int |
7723 | bnx2_set_features(struct net_device *dev, netdev_features_t features) | 7712 | bnx2_set_features(struct net_device *dev, netdev_features_t features) |
7724 | { | 7713 | { |
@@ -8525,7 +8514,6 @@ static const struct net_device_ops bnx2_netdev_ops = { | |||
8525 | .ndo_validate_addr = eth_validate_addr, | 8514 | .ndo_validate_addr = eth_validate_addr, |
8526 | .ndo_set_mac_address = bnx2_change_mac_addr, | 8515 | .ndo_set_mac_address = bnx2_change_mac_addr, |
8527 | .ndo_change_mtu = bnx2_change_mtu, | 8516 | .ndo_change_mtu = bnx2_change_mtu, |
8528 | .ndo_fix_features = bnx2_fix_features, | ||
8529 | .ndo_set_features = bnx2_set_features, | 8517 | .ndo_set_features = bnx2_set_features, |
8530 | .ndo_tx_timeout = bnx2_tx_timeout, | 8518 | .ndo_tx_timeout = bnx2_tx_timeout, |
8531 | #ifdef CONFIG_NET_POLL_CONTROLLER | 8519 | #ifdef CONFIG_NET_POLL_CONTROLLER |
@@ -8576,6 +8564,9 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
8576 | dev->features |= dev->hw_features; | 8564 | dev->features |= dev->hw_features; |
8577 | dev->priv_flags |= IFF_UNICAST_FLT; | 8565 | dev->priv_flags |= IFF_UNICAST_FLT; |
8578 | 8566 | ||
8567 | if (!(bp->flags & BNX2_FLAG_CAN_KEEP_VLAN)) | ||
8568 | dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX; | ||
8569 | |||
8579 | if ((rc = register_netdev(dev))) { | 8570 | if ((rc = register_netdev(dev))) { |
8580 | dev_err(&pdev->dev, "Cannot register net device\n"); | 8571 | dev_err(&pdev->dev, "Cannot register net device\n"); |
8581 | goto error; | 8572 | goto error; |