Skip to contentSkip to conversation

sfc: on MC reset, clear PIO buffer linkage in TXQs

PATCH In review Edward Cree 2 participants 2 messages May 24, 2016 – May 25, 2016

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sfc: on MC reset, clear PIO buffer linkage in TXQs

Otherwise, if we fail to allocate new PIO buffers, our TXQs will try to use the old ones, which aren't there any more.

Fixes 183233bec810 "sfc: Allocate and link PIO buffers; map them with write-combining"
---
 drivers/net/ethernet/sfc/ef10.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
drivers/net/ethernet/sfc/ef10.c +16 -0
index 1681084..1f30912 100644
@@ -619,6 +619,17 @@ fail:
 	return rc;
 }
 
+static void efx_ef10_forget_old_piobufs(struct efx_nic *efx)
+{
+	struct efx_channel *channel;
+	struct efx_tx_queue *tx_queue;
+
+	/* All our existing PIO buffers went away */
+	efx_for_each_channel(channel, efx)
+		efx_for_each_channel_tx_queue(tx_queue, channel)
+			tx_queue->piobuf = NULL;
+}
+
 #else /* !EFX_USE_PIO */
 
 static int efx_ef10_alloc_piobufs(struct efx_nic *efx, unsigned int n)
@@ -635,6 +646,10 @@ static void efx_ef10_free_piobufs(struct efx_nic *efx)
 {
 }
 
+static void efx_ef10_forget_old_piobufs(struct efx_nic *efx)
+{
+}
+
 #endif /* EFX_USE_PIO */
 
 static void efx_ef10_remove(struct efx_nic *efx)
@@ -1018,6 +1033,7 @@ static void efx_ef10_reset_mc_allocations(struct efx_nic *efx)
 	nic_data->must_realloc_vis = true;
 	nic_data->must_restore_filters = true;
 	nic_data->must_restore_piobufs = true;
+	efx_ef10_forget_old_piobufs(efx);
 	nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID;
 
 	/* Driver-created vswitches and vports must be re-created */
maintainer
#1 lore raw

From: Edward Cree <[email protected]>
Date: Tue, 24 May 2016 18:53:36 +0100

Quoted 5 lines

Otherwise, if we fail to allocate new PIO buffers, our TXQs will try to use the old ones, which aren't there any more.

Fixes 183233bec810 "sfc: Allocate and link PIO buffers; map them with write-combining"

Applied and queued up for -stable.