sfc: Wait at most 10ms for the MC to finish reading out MAC statistics
The original code would wait indefinitely if MAC stats DMA failed. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Cc: stable@kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c078669340
commit
aabc564907
|
@ -456,8 +456,17 @@ static int siena_try_update_nic_stats(struct efx_nic *efx)
|
||||||
|
|
||||||
static void siena_update_nic_stats(struct efx_nic *efx)
|
static void siena_update_nic_stats(struct efx_nic *efx)
|
||||||
{
|
{
|
||||||
while (siena_try_update_nic_stats(efx) == -EAGAIN)
|
int retry;
|
||||||
cpu_relax();
|
|
||||||
|
/* If we're unlucky enough to read statistics wduring the DMA, wait
|
||||||
|
* up to 10ms for it to finish (typically takes <500us) */
|
||||||
|
for (retry = 0; retry < 100; ++retry) {
|
||||||
|
if (siena_try_update_nic_stats(efx) == 0)
|
||||||
|
return;
|
||||||
|
udelay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use the old values instead */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void siena_start_nic_stats(struct efx_nic *efx)
|
static void siena_start_nic_stats(struct efx_nic *efx)
|
||||||
|
|
Loading…
Reference in New Issue