[lkml]   [2009]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[patch 44/58] mv643xx_eth: 64bit mib counter read fix
    2.6.29-stable review patch.  If anyone has any objections, please let us know.


    From: Lennert Buytenhek <>

    commit 93af7aca44f0e82e67bda10a0fb73d383edcc8bd upstream.

    On several mv643xx_eth hardware versions, the two 64bit mib counters
    for 'good octets received' and 'good octets sent' are actually 32bit
    counters, and reading from the upper half of the register has the same
    effect as reading from the lower half of the register: an atomic
    read-and-clear of the entire 32bit counter value. This can under heavy
    traffic occasionally lead to small numbers being added to the upper
    half of the 64bit mib counter even though no 32bit wrap has occured.

    Since we poll the mib counters at least every 30 seconds anyway, we
    might as well just skip the reads of the upper halves of the hardware
    counters without breaking the stats, which this patch does.

    Signed-off-by: Lennert Buytenhek <>
    Signed-off-by: David S. Miller <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/net/mv643xx_eth.c | 2 --
    1 file changed, 2 deletions(-)

    --- a/drivers/net/mv643xx_eth.c
    +++ b/drivers/net/mv643xx_eth.c
    @@ -1177,7 +1177,6 @@ static void mib_counters_update(struct m

    p->good_octets_received += mib_read(mp, 0x00);
    - p->good_octets_received += (u64)mib_read(mp, 0x04) << 32;
    p->bad_octets_received += mib_read(mp, 0x08);
    p->internal_mac_transmit_err += mib_read(mp, 0x0c);
    p->good_frames_received += mib_read(mp, 0x10);
    @@ -1191,7 +1190,6 @@ static void mib_counters_update(struct m
    p->frames_512_to_1023_octets += mib_read(mp, 0x30);
    p->frames_1024_to_max_octets += mib_read(mp, 0x34);
    p->good_octets_sent += mib_read(mp, 0x38);
    - p->good_octets_sent += (u64)mib_read(mp, 0x3c) << 32;
    p->good_frames_sent += mib_read(mp, 0x40);
    p->excessive_collision += mib_read(mp, 0x44);
    p->multicast_frames_sent += mib_read(mp, 0x48);

     \ /
      Last update: 2009-05-07 00:17    [W:0.023 / U:4.808 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site