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: 183233bec8
"sfc: Allocate and link PIO buffers; map them with write-combining"
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
217f97e856
commit
c0795bf64c
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue