Message ID | 6beed7df-01e6-a15e-0e19-d40bf0ff945c@solarflare.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] sfc: ensure recovery after allocation failures | expand |
From: Bert Kenward <bkenward@solarflare.com> Date: Thu, 14 Feb 2019 17:27:43 +0000 > From: Robert Stonehouse <rstonehouse@solarflare.com> > > After failing to allocate a receive buffer the driver may fail to ever > request additional allocations. EF10 NICs require new receive buffers to > be pushed in batches of eight or more. The test for whether a slow fill > should be scheduled failed to take account of this. There is little > downside to *always* requesting a slow fill if we failed to allocate a > buffer, so the condition has been removed completely. The timer that > triggers the request for a refill has also been shortened. > > Signed-off-by: Robert Stonehouse <rstonehouse@solarflare.com> > Signed-off-by: Bert Kenward <bkenward@solarflare.com> Applied, thanks Bert.
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index 3643015a55cf..bc655ffc9e02 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c @@ -915,7 +915,7 @@ efx_realloc_channels(struct efx_nic *efx, u32 rxq_entries, u32 txq_entries) void efx_schedule_slow_fill(struct efx_rx_queue *rx_queue) { - mod_timer(&rx_queue->slow_fill, jiffies + msecs_to_jiffies(100)); + mod_timer(&rx_queue->slow_fill, jiffies + msecs_to_jiffies(10)); } static bool efx_default_channel_want_txqs(struct efx_channel *channel) diff --git a/drivers/net/ethernet/sfc/rx.c b/drivers/net/ethernet/sfc/rx.c index 396ff01298cd..8702ab44d80b 100644 --- a/drivers/net/ethernet/sfc/rx.c +++ b/drivers/net/ethernet/sfc/rx.c @@ -360,8 +360,7 @@ void efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue, bool atomic) rc = efx_init_rx_buffers(rx_queue, atomic); if (unlikely(rc)) { /* Ensure that we don't leave the rx queue empty */ - if (rx_queue->added_count == rx_queue->removed_count) - efx_schedule_slow_fill(rx_queue); + efx_schedule_slow_fill(rx_queue); goto out; } } while ((space -= batch_size) >= batch_size);