Commit 5fa8517f authored by Greg Rose's avatar Greg Rose Committed by David S. Miller

igb: Use only a single Tx queue in SR-IOV mode

The 82576 expects the second rx queue in any pool to receive L2 switch
loop back packets sent from the second tx queue in another pool.  The
82576 VF driver does not enable the second rx queue so if the PF driver
sends packets destined to a VF from its second tx queue then the VF
driver will never see them.  In SR-IOV mode limit the number of tx queues
used by the PF driver to one. This patch fixes a bug reported in which
the PF cannot communciate with the VF and should be considered for 2.6.34
stable.

CC: stable@kernel.org
Signed-off-by: default avatarGreg Rose <gregory.v.rose@intel.com>
Tested-by: default avatarJeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ede3ef0d
...@@ -630,9 +630,6 @@ static void igb_cache_ring_register(struct igb_adapter *adapter) ...@@ -630,9 +630,6 @@ static void igb_cache_ring_register(struct igb_adapter *adapter)
for (; i < adapter->rss_queues; i++) for (; i < adapter->rss_queues; i++)
adapter->rx_ring[i]->reg_idx = rbase_offset + adapter->rx_ring[i]->reg_idx = rbase_offset +
Q_IDX_82576(i); Q_IDX_82576(i);
for (; j < adapter->rss_queues; j++)
adapter->tx_ring[j]->reg_idx = rbase_offset +
Q_IDX_82576(j);
} }
case e1000_82575: case e1000_82575:
case e1000_82580: case e1000_82580:
...@@ -996,7 +993,10 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter) ...@@ -996,7 +993,10 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter)
/* Number of supported queues. */ /* Number of supported queues. */
adapter->num_rx_queues = adapter->rss_queues; adapter->num_rx_queues = adapter->rss_queues;
adapter->num_tx_queues = adapter->rss_queues; if (adapter->vfs_allocated_count)
adapter->num_tx_queues = 1;
else
adapter->num_tx_queues = adapter->rss_queues;
/* start with one vector for every rx queue */ /* start with one vector for every rx queue */
numvecs = adapter->num_rx_queues; numvecs = adapter->num_rx_queues;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment