• Nikita Yushchenko's avatar
    net: fec: cache statistics while device is down · 80cca775
    Nikita Yushchenko authored
    Execution 'ethtool -S' on fec device that is down causes OOPS on Vybrid
    board:
    
    Unhandled fault: external abort on non-linefetch (0x1008) at 0xe0898200
    pgd = ddecc000
    [e0898200] *pgd=9e406811, *pte=400d1653, *ppte=400d1453
    Internal error: : 1008 [#1] SMP ARM
    ...
    
    Reason of OOPS is that fec_enet_get_ethtool_stats() accesses fec
    registers while IPG clock is stopped by PM.
    
    Fix that by caching statistics in fec_enet_private. Cache is initialized
    at device probe time, and updated at statistics request time if device
    is up, and also just before turning device off on down path.
    
    Additional locking is not needed, since cached statistics is accessed
    either before device is registered, or under rtnl_lock().
    Signed-off-by: default avatarNikita Yushchenko <nikita.yoush@cogentembedded.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    80cca775
fec.h 23.2 KB