Skip to content

Commit

Permalink
8139cp: safer spin loop for get_statistics
Browse files Browse the repository at this point in the history
The spin loop in 8139cp is limited to 100 iterations when pulling hardware
stats. There is no allowance for processor speed so on a fast machine, the
stats may not be available that fast. Also, if the board doesn't return
soon enough make sure turn the address back off to prevent later updates
when memory has gone away.
  • Loading branch information
Stephen Hemminger authored and Jeff Garzik committed Jun 26, 2005
1 parent 223d472 commit 97f568d
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/net/8139cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1516,22 +1516,22 @@ static void cp_get_ethtool_stats (struct net_device *dev,
struct ethtool_stats *estats, u64 *tmp_stats)
{
struct cp_private *cp = netdev_priv(dev);
unsigned int work = 100;
int i;

memset(cp->nic_stats, 0, sizeof(struct cp_dma_stats));

/* begin NIC statistics dump */
cpw32(StatsAddr + 4, (cp->nic_stats_dma >> 16) >> 16);
cpw32(StatsAddr, (cp->nic_stats_dma & 0xffffffff) | DumpStats);
cpr32(StatsAddr);

while (work-- > 0) {
for (i = 0; i < 1000; i++) {
if ((cpr32(StatsAddr) & DumpStats) == 0)
break;
cpu_relax();
udelay(10);
}

if (cpr32(StatsAddr) & DumpStats)
return /* -EIO */;
cpw32(StatsAddr, 0);
cpw32(StatsAddr + 4, 0);

i = 0;
tmp_stats[i++] = le64_to_cpu(cp->nic_stats->tx_ok);
Expand Down

0 comments on commit 97f568d

Please sign in to comment.