]>
Commit | Line | Data |
---|---|---|
2e1fe3c8 AF |
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 | |
4 | @@ -5952,9 +5952,13 @@ | |
5 | struct rtnl_link_stats64 *stats) | |
6 | { | |
7 | struct e1000_adapter *adapter = netdev_priv(netdev); | |
8 | + int has_lock = 0; | |
9 | + | |
10 | + if (spin_trylock(&adapter->stats64_lock)) { | |
11 | + e1000e_update_stats(adapter); | |
12 | + has_lock = 1; | |
13 | + } | |
14 | ||
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; | |
20 | @@ -5984,7 +5988,7 @@ | |
21 | ||
22 | /* Tx Dropped needs to be maintained elsewhere */ | |
23 | ||
24 | - spin_unlock(&adapter->stats64_lock); | |
25 | + if (has_lock) spin_unlock(&adapter->stats64_lock); | |
26 | } | |
27 | ||
28 | /** | |
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 @@ | |
33 | { | |
34 | struct igb_adapter *adapter = netdev_priv(netdev); | |
35 | ||
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); | |
41 | + } | |
42 | memcpy(stats, &adapter->stats64, sizeof(*stats)); | |
43 | - spin_unlock(&adapter->stats64_lock); | |
44 | } | |
45 | ||
46 | /** |