Skip to content

Commit

Permalink
ixgbe: change config srrctl to only program one register per VMDq/RSS id
Browse files Browse the repository at this point in the history
This change makes it so only one srrctl register is programmed per VMDq id, and if VMDq is not enabled it is one register per RSS queue.  Currently this function is working correctly for the multiqueue RSS and single queue cases, but if any advances features such as VMDq or DCB would have been enabled this function would have caused issues as it was not correct.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
  • Loading branch information
Alexander Duyck authored and Jeff Garzik committed Sep 3, 2008
1 parent 1a32bcf commit 3be1adf
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions drivers/net/ixgbe/ixgbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1417,18 +1417,23 @@ static void ixgbe_configure_srrctl(struct ixgbe_adapter *adapter, int index)
struct ixgbe_ring *rx_ring;
u32 srrctl;
int queue0;
unsigned long *mask, maskval = 1;
long shift, len;

if (adapter->flags & IXGBE_FLAG_RSS_ENABLED) {
mask = (unsigned long *) &adapter->ring_feature[RING_F_RSS].mask;
len = sizeof(adapter->ring_feature[RING_F_RSS].mask) * 8;
unsigned long mask;

/* program one srrctl register per VMDq index */
if (adapter->flags & IXGBE_FLAG_VMDQ_ENABLED) {
long shift, len;
mask = (unsigned long) adapter->ring_feature[RING_F_RSS].mask;
len = sizeof(adapter->ring_feature[RING_F_VMDQ].mask) * 8;
shift = find_first_bit(&mask, len);
queue0 = index & mask;
index = (index & mask) >> shift;
/* program one srrctl per RSS queue since RDRXCTL.MVMEN is enabled */
} else {
mask = &maskval;
len = 1;
mask = (unsigned long) adapter->ring_feature[RING_F_RSS].mask;
queue0 = index & mask;
index = index & mask;
}
shift = find_first_bit(mask, len);
queue0 = index << shift;

rx_ring = &adapter->rx_ring[queue0];

srrctl = IXGBE_READ_REG(&adapter->hw, IXGBE_SRRCTL(index));
Expand Down

0 comments on commit 3be1adf

Please sign in to comment.