Skip to content

Commit

Permalink
ixgbevf: Fix panics in the VF driver
Browse files Browse the repository at this point in the history
Fix panics in the VF driver that occur when you bring it down after
having already brought the PF down.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Greg Rose authored and David S. Miller committed Jan 23, 2010
1 parent a9ee25a commit c0456c2
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions drivers/net/ixgbevf/ixgbevf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1693,8 +1693,10 @@ static void ixgbevf_clean_rx_ring(struct ixgbevf_adapter *adapter,
unsigned long size;
unsigned int i;

/* Free all the Rx ring sk_buffs */
if (!rx_ring->rx_buffer_info)
return;

/* Free all the Rx ring sk_buffs */
for (i = 0; i < rx_ring->count; i++) {
struct ixgbevf_rx_buffer *rx_buffer_info;

Expand Down Expand Up @@ -1751,6 +1753,9 @@ static void ixgbevf_clean_tx_ring(struct ixgbevf_adapter *adapter,
unsigned long size;
unsigned int i;

if (!tx_ring->tx_buffer_info)
return;

/* Free all the Tx ring sk_buffs */

for (i = 0; i < tx_ring->count; i++) {
Expand Down Expand Up @@ -1843,12 +1848,24 @@ void ixgbevf_down(struct ixgbevf_adapter *adapter)

void ixgbevf_reinit_locked(struct ixgbevf_adapter *adapter)
{
struct ixgbe_hw *hw = &adapter->hw;

WARN_ON(in_interrupt());

while (test_and_set_bit(__IXGBEVF_RESETTING, &adapter->state))
msleep(1);

ixgbevf_down(adapter);
ixgbevf_up(adapter);
/*
* Check if PF is up before re-init. If not then skip until
* later when the PF is up and ready to service requests from
* the VF via mailbox. If the VF is up and running then the
* watchdog task will continue to schedule reset tasks until
* the PF is up and running.
*/
if (!hw->mac.ops.reset_hw(hw)) {
ixgbevf_down(adapter);
ixgbevf_up(adapter);
}

clear_bit(__IXGBEVF_RESETTING, &adapter->state);
}
Expand Down Expand Up @@ -2423,7 +2440,6 @@ void ixgbevf_free_tx_resources(struct ixgbevf_adapter *adapter,
{
struct pci_dev *pdev = adapter->pdev;


ixgbevf_clean_tx_ring(adapter, tx_ring);

vfree(tx_ring->tx_buffer_info);
Expand Down

0 comments on commit c0456c2

Please sign in to comment.