ixgbe: fix setting of promisc mode when using mac-vlans
[deliverable/linux.git] / drivers / net / ixgbe / ixgbe_main.c
index ff59f88dc7a14ec0fa82703b740274696c4a6196..15032c79e003c199eed2311bf6b6d4d6cbfafd30 100644 (file)
@@ -2722,7 +2722,7 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
                IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), (1 << vf_shift));
                IXGBE_WRITE_REG(hw, IXGBE_VFTE(reg_offset), (1 << vf_shift));
                IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN);
-               ixgbe_set_vmolr(hw, adapter->num_vfs);
+               ixgbe_set_vmolr(hw, adapter->num_vfs, true);
        }
 
        /* Program MRQC for the distribution of queues */
@@ -2952,7 +2952,7 @@ void ixgbe_set_rx_mode(struct net_device *netdev)
        fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL);
 
        if (netdev->flags & IFF_PROMISC) {
-               hw->addr_ctrl.user_set_promisc = 1;
+               hw->addr_ctrl.user_set_promisc = true;
                fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
                /* don't hardware filter vlans in promisc mode */
                ixgbe_vlan_filter_disable(adapter);
@@ -2960,11 +2960,11 @@ void ixgbe_set_rx_mode(struct net_device *netdev)
                if (netdev->flags & IFF_ALLMULTI) {
                        fctrl |= IXGBE_FCTRL_MPE;
                        fctrl &= ~IXGBE_FCTRL_UPE;
-               } else {
+               } else if (!hw->addr_ctrl.uc_set_promisc) {
                        fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
                }
                ixgbe_vlan_filter_enable(adapter);
-               hw->addr_ctrl.user_set_promisc = 0;
+               hw->addr_ctrl.user_set_promisc = false;
        }
 
        IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl);
@@ -4314,9 +4314,6 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
        int err = 0;
        int vector, v_budget;
 
-       if (!(adapter->flags & IXGBE_FLAG_MSIX_CAPABLE))
-               goto try_msi;
-
        /*
         * It's easy to be greedy for MSI-X vectors, but it really
         * doesn't do us much good if we have a lot more vectors
@@ -4348,7 +4345,7 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
                if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED)
                        goto out;
        }
-try_msi:
+
        adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
        adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED;
        adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE;
@@ -4629,18 +4626,6 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
        adapter->ring_feature[RING_F_RSS].indices = rss;
        adapter->flags |= IXGBE_FLAG_RSS_ENABLED;
        adapter->ring_feature[RING_F_DCB].indices = IXGBE_MAX_DCB_INDICES;
-       adapter->flags |= IXGBE_FLAG_MSIX_CAPABLE;
-       if (adapter->hw.device_id == IXGBE_DEV_ID_82598AF_DUAL_PORT) {
-               switch (adapter->hw.subsystem_device_id) {
-               case IXGBE_SUBDEV_ID_82598AF_MEZZ:
-               case IXGBE_SUBDEV_ID_82598AF_MENLO_Q_MEZZ:
-               case IXGBE_SUBDEV_ID_82598AF_MENLO_E_MEZZ:
-                       adapter->flags &= ~IXGBE_FLAG_MSIX_CAPABLE;
-                       break;
-               default:
-                       break;
-               }
-       }
        if (hw->mac.type == ixgbe_mac_82598EB) {
                if (hw->device_id == IXGBE_DEV_ID_82598AT)
                        adapter->flags |= IXGBE_FLAG_FAN_FAIL_CAPABLE;
@@ -6326,6 +6311,10 @@ static const struct net_device_ops ixgbe_netdev_ops = {
        .ndo_vlan_rx_add_vid    = ixgbe_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid   = ixgbe_vlan_rx_kill_vid,
        .ndo_do_ioctl           = ixgbe_ioctl,
+       .ndo_set_vf_mac         = ixgbe_ndo_set_vf_mac,
+       .ndo_set_vf_vlan        = ixgbe_ndo_set_vf_vlan,
+       .ndo_set_vf_tx_rate     = ixgbe_ndo_set_vf_bw,
+       .ndo_get_vf_config      = ixgbe_ndo_get_vf_config,
 #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = ixgbe_netpoll,
 #endif
This page took 0.028629 seconds and 5 git commands to generate.