1 diff -Naur linux-4.14.1.org/drivers/net/ethernet/intel/e1000e/netdev.c linux-4.14.1/drivers/net/ethernet/intel/e1000e/netdev.c
2 --- linux-4.14.1.org/drivers/net/ethernet/intel/e1000e/netdev.c 2017-11-21 09:49:25.000000000 +0100
3 +++ linux-4.14.1/drivers/net/ethernet/intel/e1000e/netdev.c 2017-11-21 18:28:05.730711267 +0100
5 struct rtnl_link_stats64 *stats)
7 struct e1000_adapter *adapter = netdev_priv(netdev);
10 + if (spin_trylock(&adapter->stats64_lock)) {
11 + e1000e_update_stats(adapter);
15 - spin_lock(&adapter->stats64_lock);
16 - e1000e_update_stats(adapter);
17 /* Fill out the OS statistics structure */
18 stats->rx_bytes = adapter->stats.gorc;
19 stats->rx_packets = adapter->stats.gprc;
22 /* Tx Dropped needs to be maintained elsewhere */
24 - spin_unlock(&adapter->stats64_lock);
25 + if (has_lock) spin_unlock(&adapter->stats64_lock);
29 diff -Naur linux-4.14.1.org/drivers/net/ethernet/intel/igb/igb_main.c linux-4.14.1/drivers/net/ethernet/intel/igb/igb_main.c
30 --- linux-4.14.1.org/drivers/net/ethernet/intel/igb/igb_main.c 2017-11-21 09:49:25.000000000 +0100
31 +++ linux-4.14.1/drivers/net/ethernet/intel/igb/igb_main.c 2017-11-21 18:28:02.358749514 +0100
32 @@ -5499,10 +5499,11 @@
34 struct igb_adapter *adapter = netdev_priv(netdev);
36 - spin_lock(&adapter->stats64_lock);
37 - igb_update_stats(adapter);
38 + if (spin_trylock(&adapter->stats64_lock)) {
39 + igb_update_stats(adapter);
40 + spin_unlock(&adapter->stats64_lock);
42 memcpy(stats, &adapter->stats64, sizeof(*stats));
43 - spin_unlock(&adapter->stats64_lock);