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>

authored by Ben Hutchings and committed by David S. Miller aabc5649 c0786693

+11 -2
+11 -2
drivers/net/sfc/siena.c
··· 456 456 457 457 static void siena_update_nic_stats(struct efx_nic *efx) 458 458 { 459 - while (siena_try_update_nic_stats(efx) == -EAGAIN) 460 - cpu_relax(); 459 + int retry; 460 + 461 + /* If we're unlucky enough to read statistics wduring the DMA, wait 462 + * up to 10ms for it to finish (typically takes <500us) */ 463 + for (retry = 0; retry < 100; ++retry) { 464 + if (siena_try_update_nic_stats(efx) == 0) 465 + return; 466 + udelay(100); 467 + } 468 + 469 + /* Use the old values instead */ 461 470 } 462 471 463 472 static void siena_start_nic_stats(struct efx_nic *efx)