Commit 78d24645 authored by Edward Cree's avatar Edward Cree Committed by Ben Hutchings

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

commit c0795bf6 upstream.

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: 183233be "sfc: Allocate and link PIO buffers; map them with write-combining"
Signed-off-by: default avatarEdward Cree <ecree@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 01a997da
...@@ -451,6 +451,17 @@ static int efx_ef10_link_piobufs(struct efx_nic *efx) ...@@ -451,6 +451,17 @@ static int efx_ef10_link_piobufs(struct efx_nic *efx)
return rc; 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 */ #else /* !EFX_USE_PIO */
static int efx_ef10_alloc_piobufs(struct efx_nic *efx, unsigned int n) static int efx_ef10_alloc_piobufs(struct efx_nic *efx, unsigned int n)
...@@ -467,6 +478,10 @@ static void efx_ef10_free_piobufs(struct efx_nic *efx) ...@@ -467,6 +478,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 */ #endif /* EFX_USE_PIO */
static void efx_ef10_remove(struct efx_nic *efx) static void efx_ef10_remove(struct efx_nic *efx)
...@@ -698,6 +713,7 @@ static void efx_ef10_reset_mc_allocations(struct efx_nic *efx) ...@@ -698,6 +713,7 @@ static void efx_ef10_reset_mc_allocations(struct efx_nic *efx)
nic_data->must_realloc_vis = true; nic_data->must_realloc_vis = true;
nic_data->must_restore_filters = true; nic_data->must_restore_filters = true;
nic_data->must_restore_piobufs = true; nic_data->must_restore_piobufs = true;
efx_ef10_forget_old_piobufs(efx);
nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID; nic_data->rx_rss_context = EFX_EF10_RSS_CONTEXT_INVALID;
} }
......
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