{
        struct ixgbe_fwd_adapter *fwd_adapter = NULL;
        struct ixgbe_adapter *adapter = netdev_priv(pdev);
+       unsigned int limit;
        int pool, err;
 
 #ifdef CONFIG_RPS
        pool = find_first_zero_bit(&adapter->fwd_bitmask, 32);
        adapter->num_rx_pools++;
        set_bit(pool, &adapter->fwd_bitmask);
+       limit = find_last_bit(&adapter->fwd_bitmask, 32);
 
        /* Enable VMDq flag so device will be set in VM mode */
        adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED | IXGBE_FLAG_SRIOV_ENABLED;
-       adapter->ring_feature[RING_F_VMDQ].limit = adapter->num_rx_pools;
+       adapter->ring_feature[RING_F_VMDQ].limit = limit + 1;
        adapter->ring_feature[RING_F_RSS].limit = vdev->num_tx_queues;
 
        /* Force reinit of ring allocation with VMDQ enabled */
 {
        struct ixgbe_fwd_adapter *fwd_adapter = priv;
        struct ixgbe_adapter *adapter = fwd_adapter->real_adapter;
+       unsigned int limit;
 
        clear_bit(fwd_adapter->pool, &adapter->fwd_bitmask);
        adapter->num_rx_pools--;
 
-       adapter->ring_feature[RING_F_VMDQ].limit = adapter->num_rx_pools;
+       limit = find_last_bit(&adapter->fwd_bitmask, 32);
+       adapter->ring_feature[RING_F_VMDQ].limit = limit + 1;
        ixgbe_fwd_ring_down(fwd_adapter->netdev, fwd_adapter);
        ixgbe_setup_tc(pdev, netdev_get_num_tc(pdev));
        netdev_dbg(pdev, "pool %i:%i queues %i:%i VSI bitmask %lx\n",