aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/igb/igb_main.c
diff options
context:
space:
mode:
authorGreg Rose <gregory.v.rose@intel.com>2010-07-01 09:38:16 -0400
committerDavid S. Miller <davem@davemloft.net>2010-07-02 01:45:55 -0400
commit5fa8517f038d51d571981fb495206cc30ed91b06 (patch)
tree220719b760747cea356a564e67ab34ca3209dca2 /drivers/net/igb/igb_main.c
parentede3ef0d940ef052466f42c849390b23c6859abc (diff)
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: Greg Rose <gregory.v.rose@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/igb/igb_main.c')
-rw-r--r--drivers/net/igb/igb_main.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 3881918f5382..e79689eeb1fe 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -630,9 +630,6 @@ static void igb_cache_ring_register(struct igb_adapter *adapter)
630 for (; i < adapter->rss_queues; i++) 630 for (; i < adapter->rss_queues; i++)
631 adapter->rx_ring[i]->reg_idx = rbase_offset + 631 adapter->rx_ring[i]->reg_idx = rbase_offset +
632 Q_IDX_82576(i); 632 Q_IDX_82576(i);
633 for (; j < adapter->rss_queues; j++)
634 adapter->tx_ring[j]->reg_idx = rbase_offset +
635 Q_IDX_82576(j);
636 } 633 }
637 case e1000_82575: 634 case e1000_82575:
638 case e1000_82580: 635 case e1000_82580:
@@ -996,7 +993,10 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter)
996 993
997 /* Number of supported queues. */ 994 /* Number of supported queues. */
998 adapter->num_rx_queues = adapter->rss_queues; 995 adapter->num_rx_queues = adapter->rss_queues;
999 adapter->num_tx_queues = adapter->rss_queues; 996 if (adapter->vfs_allocated_count)
997 adapter->num_tx_queues = 1;
998 else
999 adapter->num_tx_queues = adapter->rss_queues;
1000 1000
1001 /* start with one vector for every rx queue */ 1001 /* start with one vector for every rx queue */
1002 numvecs = adapter->num_rx_queues; 1002 numvecs = adapter->num_rx_queues;