Skip to content

Commit

Permalink
igb: resolve panic on shutdown when SR-IOV is enabled
Browse files Browse the repository at this point in the history
The setup_rctl call was making a call into the ring structure after it had
been freed.  This was causing a panic on shutdown.  This call wasn't
necessary since it is possible to get the needed index from
adapter->vfs_allocated_count.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Alexander Duyck authored and David S. Miller committed May 6, 2009
1 parent a860820 commit 77a2294
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions drivers/net/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2006,7 +2006,7 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
struct e1000_hw *hw = &adapter->hw;
u32 rctl;
u32 srrctl = 0;
int i, j;
int i;

rctl = rd32(E1000_RCTL);

Expand Down Expand Up @@ -2071,25 +2071,23 @@ static void igb_setup_rctl(struct igb_adapter *adapter)
if (adapter->vfs_allocated_count) {
u32 vmolr;

j = adapter->rx_ring[0].reg_idx;

/* set all queue drop enable bits */
wr32(E1000_QDE, ALL_QUEUES);
srrctl |= E1000_SRRCTL_DROP_EN;

/* disable queue 0 to prevent tail write w/o re-config */
wr32(E1000_RXDCTL(0), 0);

vmolr = rd32(E1000_VMOLR(j));
vmolr = rd32(E1000_VMOLR(adapter->vfs_allocated_count));
if (rctl & E1000_RCTL_LPE)
vmolr |= E1000_VMOLR_LPE;
if (adapter->num_rx_queues > 0)
if (adapter->num_rx_queues > 1)
vmolr |= E1000_VMOLR_RSSE;
wr32(E1000_VMOLR(j), vmolr);
wr32(E1000_VMOLR(adapter->vfs_allocated_count), vmolr);
}

for (i = 0; i < adapter->num_rx_queues; i++) {
j = adapter->rx_ring[i].reg_idx;
int j = adapter->rx_ring[i].reg_idx;
wr32(E1000_SRRCTL(j), srrctl);
}

Expand Down

0 comments on commit 77a2294

Please sign in to comment.