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:
Ben Hutchings 2010-04-28 09:00:35 +00:00 committed by David S. Miller
parent c078669340
commit aabc564907
1 changed files with 11 additions and 2 deletions

View File

@ -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)