From 173d93ea23dabf4f08228dc2aaf70a004cf4141c Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 15 Apr 2018 19:24:42 +0200 Subject: ramips: fix locking issues in the ethernet driver The stats update needs to protect against being interrupted by a tasklet The u64 stats seqlock needs to be initialized Signed-off-by: Felix Fietkau --- .../linux/ramips/files-4.14/drivers/net/ethernet/mtk/mtk_eth_soc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'target/linux/ramips') diff --git a/target/linux/ramips/files-4.14/drivers/net/ethernet/mtk/mtk_eth_soc.c b/target/linux/ramips/files-4.14/drivers/net/ethernet/mtk/mtk_eth_soc.c index 49505eab86..d0d88b92c5 100644 --- a/target/linux/ramips/files-4.14/drivers/net/ethernet/mtk/mtk_eth_soc.c +++ b/target/linux/ramips/files-4.14/drivers/net/ethernet/mtk/mtk_eth_soc.c @@ -477,9 +477,9 @@ static void fe_get_stats64(struct net_device *dev, } if (netif_running(dev) && netif_device_present(dev)) { - if (spin_trylock(&hwstats->stats_lock)) { + if (spin_trylock_bh(&hwstats->stats_lock)) { fe_stats_update(priv); - spin_unlock(&hwstats->stats_lock); + spin_unlock_bh(&hwstats->stats_lock); } } @@ -1581,6 +1581,7 @@ static int fe_probe(struct platform_device *pdev) priv->tx_ring.tx_ring_size = NUM_DMA_DESC; priv->rx_ring.rx_ring_size = NUM_DMA_DESC; INIT_WORK(&priv->pending_work, fe_pending_work); + u64_stats_init(&priv->hw_stats->syncp); napi_weight = 16; if (priv->flags & FE_FLAG_NAPI_WEIGHT) { -- cgit v1.2.3