aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 2e17c307c6df..ec1bf3edb063 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7536,6 +7536,7 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
7536{ 7536{
7537 struct ixgbe_fwd_adapter *fwd_adapter = NULL; 7537 struct ixgbe_fwd_adapter *fwd_adapter = NULL;
7538 struct ixgbe_adapter *adapter = netdev_priv(pdev); 7538 struct ixgbe_adapter *adapter = netdev_priv(pdev);
7539 unsigned int limit;
7539 int pool, err; 7540 int pool, err;
7540 7541
7541#ifdef CONFIG_RPS 7542#ifdef CONFIG_RPS
@@ -7566,10 +7567,11 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
7566 pool = find_first_zero_bit(&adapter->fwd_bitmask, 32); 7567 pool = find_first_zero_bit(&adapter->fwd_bitmask, 32);
7567 adapter->num_rx_pools++; 7568 adapter->num_rx_pools++;
7568 set_bit(pool, &adapter->fwd_bitmask); 7569 set_bit(pool, &adapter->fwd_bitmask);
7570 limit = find_last_bit(&adapter->fwd_bitmask, 32);
7569 7571
7570 /* Enable VMDq flag so device will be set in VM mode */ 7572 /* Enable VMDq flag so device will be set in VM mode */
7571 adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED | IXGBE_FLAG_SRIOV_ENABLED; 7573 adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED | IXGBE_FLAG_SRIOV_ENABLED;
7572 adapter->ring_feature[RING_F_VMDQ].limit = adapter->num_rx_pools; 7574 adapter->ring_feature[RING_F_VMDQ].limit = limit + 1;
7573 adapter->ring_feature[RING_F_RSS].limit = vdev->num_tx_queues; 7575 adapter->ring_feature[RING_F_RSS].limit = vdev->num_tx_queues;
7574 7576
7575 /* Force reinit of ring allocation with VMDQ enabled */ 7577 /* Force reinit of ring allocation with VMDQ enabled */
@@ -7597,11 +7599,13 @@ static void ixgbe_fwd_del(struct net_device *pdev, void *priv)
7597{ 7599{
7598 struct ixgbe_fwd_adapter *fwd_adapter = priv; 7600 struct ixgbe_fwd_adapter *fwd_adapter = priv;
7599 struct ixgbe_adapter *adapter = fwd_adapter->real_adapter; 7601 struct ixgbe_adapter *adapter = fwd_adapter->real_adapter;
7602 unsigned int limit;
7600 7603
7601 clear_bit(fwd_adapter->pool, &adapter->fwd_bitmask); 7604 clear_bit(fwd_adapter->pool, &adapter->fwd_bitmask);
7602 adapter->num_rx_pools--; 7605 adapter->num_rx_pools--;
7603 7606
7604 adapter->ring_feature[RING_F_VMDQ].limit = adapter->num_rx_pools; 7607 limit = find_last_bit(&adapter->fwd_bitmask, 32);
7608 adapter->ring_feature[RING_F_VMDQ].limit = limit + 1;
7605 ixgbe_fwd_ring_down(fwd_adapter->netdev, fwd_adapter); 7609 ixgbe_fwd_ring_down(fwd_adapter->netdev, fwd_adapter);
7606 ixgbe_setup_tc(pdev, netdev_get_num_tc(pdev)); 7610 ixgbe_setup_tc(pdev, netdev_get_num_tc(pdev));
7607 netdev_dbg(pdev, "pool %i:%i queues %i:%i VSI bitmask %lx\n", 7611 netdev_dbg(pdev, "pool %i:%i queues %i:%i VSI bitmask %lx\n",