• E
    net: Introduce u64_stats_sync infrastructure · 16b8a476
    Eric Dumazet 提交于
    To properly implement 64bits network statistics on 32bit or 64bit hosts,
    we provide one new type and four methods, to ease conversions.
    
    Stats producer should use following template granted it already got an
    exclusive access to counters (include/linux/u64_stats_sync.h contains
    some documentation about details)
    
        u64_stats_update_begin(&stats->syncp);
        stats->bytes64 += len;
        stats->packets64++;
        u64_stats_update_end(&stats->syncp);
    
    While a consumer should use following template to get consistent
    snapshot :
    
        u64 tbytes, tpackets;
        unsigned int start;
    
        do {
            start = u64_stats_fetch_begin(&stats->syncp);
            tbytes = stats->bytes64;
            tpackets = stats->packets64;
        } while (u64_stats_fetch_retry(&stats->lock, syncp));
    
    Suggested by David Miller, and comments courtesy of Nick Piggin.
    Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    16b8a476
u64_stats_sync.h 3.2 KB