diff options
author | Patrick Rabau <pr2345@gmail.com> | 2010-02-15 14:42:11 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-16 18:19:04 -0500 |
commit | c9885fe5a76dea798543f2938a872bc159e8e69a (patch) | |
tree | 47d0d0f90753dc2179cd36e12825b0e608ed3c50 /drivers | |
parent | beb499afe3c9c006bb2d66ceaff0f354d0405ff4 (diff) |
bnx2: Fix bug when saving statistics.
This fixes the problem of dropping the carry when adding 2 32-bit values.
Switch to use array indexing for better readability.
Reported by and fix provided by Patrick Rabau.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bnx2.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index d1e5e5d9e986..3fb110edad49 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c | |||
@@ -6555,16 +6555,16 @@ bnx2_save_stats(struct bnx2 *bp) | |||
6555 | u32 hi; | 6555 | u32 hi; |
6556 | u64 lo; | 6556 | u64 lo; |
6557 | 6557 | ||
6558 | hi = *(temp_stats + i) + *(hw_stats + i); | 6558 | hi = temp_stats[i] + hw_stats[i]; |
6559 | lo = *(temp_stats + i + 1) + *(hw_stats + i + 1); | 6559 | lo = (u64) temp_stats[i + 1] + (u64) hw_stats[i + 1]; |
6560 | if (lo > 0xffffffff) | 6560 | if (lo > 0xffffffff) |
6561 | hi++; | 6561 | hi++; |
6562 | *(temp_stats + i) = hi; | 6562 | temp_stats[i] = hi; |
6563 | *(temp_stats + i + 1) = lo & 0xffffffff; | 6563 | temp_stats[i + 1] = lo & 0xffffffff; |
6564 | } | 6564 | } |
6565 | 6565 | ||
6566 | for ( ; i < sizeof(struct statistics_block) / 4; i++) | 6566 | for ( ; i < sizeof(struct statistics_block) / 4; i++) |
6567 | *(temp_stats + i) = *(temp_stats + i) + *(hw_stats + i); | 6567 | temp_stats[i] += hw_stats[i]; |
6568 | } | 6568 | } |
6569 | 6569 | ||
6570 | #define GET_64BIT_NET_STATS64(ctr) \ | 6570 | #define GET_64BIT_NET_STATS64(ctr) \ |