]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/net/sfc/siena.c
Merge branch 'fix/hda' into for-linus
[mv-sheeva.git] / drivers / net / sfc / siena.c
index 38dcc42c4f790648fb2add771b0610ee394e3380..e0c46f59d1f8793d365710d1e80d6c51ae469b9d 100644 (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)
 {
-       while (siena_try_update_nic_stats(efx) == -EAGAIN)
-               cpu_relax();
+       int retry;
+
+       /* 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)