|
@@ -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 */
|