Commit 9891ca7c authored by Jesse Brandeburg's avatar Jesse Brandeburg Committed by David S. Miller

ixgbe: Add a few safety nets for register writes and descriptor cleanups

There are possible times that a driver may fail to completely initialize,
due to a buggy platform or a buggy kernel.  In those cases, we'd rather
fail gracefully instead of a panic.  Add a few safety checks to some
critical paths to try and prevent a panic in these corner-case situations.
Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: default avatarPeter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2a41ff81
...@@ -2458,7 +2458,9 @@ static void ixgbe_clean_rx_ring(struct ixgbe_adapter *adapter, ...@@ -2458,7 +2458,9 @@ static void ixgbe_clean_rx_ring(struct ixgbe_adapter *adapter,
rx_ring->next_to_clean = 0; rx_ring->next_to_clean = 0;
rx_ring->next_to_use = 0; rx_ring->next_to_use = 0;
if (rx_ring->head)
writel(0, adapter->hw.hw_addr + rx_ring->head); writel(0, adapter->hw.hw_addr + rx_ring->head);
if (rx_ring->tail)
writel(0, adapter->hw.hw_addr + rx_ring->tail); writel(0, adapter->hw.hw_addr + rx_ring->tail);
} }
...@@ -2490,7 +2492,9 @@ static void ixgbe_clean_tx_ring(struct ixgbe_adapter *adapter, ...@@ -2490,7 +2492,9 @@ static void ixgbe_clean_tx_ring(struct ixgbe_adapter *adapter,
tx_ring->next_to_use = 0; tx_ring->next_to_use = 0;
tx_ring->next_to_clean = 0; tx_ring->next_to_clean = 0;
if (tx_ring->head)
writel(0, adapter->hw.hw_addr + tx_ring->head); writel(0, adapter->hw.hw_addr + tx_ring->head);
if (tx_ring->tail)
writel(0, adapter->hw.hw_addr + tx_ring->tail); writel(0, adapter->hw.hw_addr + tx_ring->tail);
} }
...@@ -3327,6 +3331,7 @@ static void ixgbe_free_all_tx_resources(struct ixgbe_adapter *adapter) ...@@ -3327,6 +3331,7 @@ static void ixgbe_free_all_tx_resources(struct ixgbe_adapter *adapter)
int i; int i;
for (i = 0; i < adapter->num_tx_queues; i++) for (i = 0; i < adapter->num_tx_queues; i++)
if (adapter->tx_ring[i].desc)
ixgbe_free_tx_resources(adapter, &adapter->tx_ring[i]); ixgbe_free_tx_resources(adapter, &adapter->tx_ring[i]);
} }
...@@ -3363,6 +3368,7 @@ static void ixgbe_free_all_rx_resources(struct ixgbe_adapter *adapter) ...@@ -3363,6 +3368,7 @@ static void ixgbe_free_all_rx_resources(struct ixgbe_adapter *adapter)
int i; int i;
for (i = 0; i < adapter->num_rx_queues; i++) for (i = 0; i < adapter->num_rx_queues; i++)
if (adapter->rx_ring[i].desc)
ixgbe_free_rx_resources(adapter, &adapter->rx_ring[i]); ixgbe_free_rx_resources(adapter, &adapter->rx_ring[i]);
} }
......
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