]> git.baikalelectronics.ru Git - kernel.git/commit
net: fec: cache statistics while device is down
authorNikita Yushchenko <nikita.yoush@cogentembedded.com>
Tue, 29 Nov 2016 06:44:51 +0000 (09:44 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Nov 2016 17:44:40 +0000 (12:44 -0500)
commitbcf3390d2621fde12def9b6ca295222286472894
treec1b4020c8833a49749d72fc1aed29497262a3370
parent51bd21e576c6e54bfcb0d1f342efe6bba3f4e7de
net: fec: cache statistics while device is down

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: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fec.h
drivers/net/ethernet/freescale/fec_main.c