mirror of https://github.com/hak5/openwrt.git
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 <nbd@nbd.name>openwrt-18.06
parent
e988b0fe0d
commit
173d93ea23
|
@ -477,9 +477,9 @@ static void fe_get_stats64(struct net_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (netif_running(dev) && netif_device_present(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);
|
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->tx_ring.tx_ring_size = NUM_DMA_DESC;
|
||||||
priv->rx_ring.rx_ring_size = NUM_DMA_DESC;
|
priv->rx_ring.rx_ring_size = NUM_DMA_DESC;
|
||||||
INIT_WORK(&priv->pending_work, fe_pending_work);
|
INIT_WORK(&priv->pending_work, fe_pending_work);
|
||||||
|
u64_stats_init(&priv->hw_stats->syncp);
|
||||||
|
|
||||||
napi_weight = 16;
|
napi_weight = 16;
|
||||||
if (priv->flags & FE_FLAG_NAPI_WEIGHT) {
|
if (priv->flags & FE_FLAG_NAPI_WEIGHT) {
|
||||||
|
|
Loading…
Reference in New Issue