• Eric Dumazet's avatar
    net: add atomic_long_t to net_device_stats fields · 6c1c5097
    Eric Dumazet authored
    Long standing KCSAN issues are caused by data-race around
    some dev->stats changes.
    
    Most performance critical paths already use per-cpu
    variables, or per-queue ones.
    
    It is reasonable (and more correct) to use atomic operations
    for the slow paths.
    
    This patch adds an union for each field of net_device_stats,
    so that we can convert paths that are not yet protected
    by a spinlock or a mutex.
    
    netdev_stats_to_stats64() no longer has an #if BITS_PER_LONG==64
    
    Note that the memcpy() we were using on 64bit arches
    had no provision to avoid load-tearing,
    while atomic_long_read() is providing the needed protection
    at no cost.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6c1c5097
dev.c 286 KB