]>
Commit | Line | Data |
---|---|---|
fcffac13 AF |
1 | diff -Naur linux-4.9.17.org/drivers/net/ethernet/intel/e1000e/netdev.c linux-4.9.17/drivers/net/ethernet/intel/e1000e/netdev.c |
2 | --- linux-4.9.17.org/drivers/net/ethernet/intel/e1000e/netdev.c 2017-03-22 12:44:07.000000000 +0100 | |
3 | +++ linux-4.9.17/drivers/net/ethernet/intel/e1000e/netdev.c 2017-03-26 16:20:47.253511522 +0200 | |
4 | @@ -5924,10 +5924,14 @@ | |
5 | struct rtnl_link_stats64 *stats) | |
6 | { | |
7 | struct e1000_adapter *adapter = netdev_priv(netdev); | |
8 | + int has_lock = 0; | |
9 | ||
10 | memset(stats, 0, sizeof(struct rtnl_link_stats64)); | |
11 | - spin_lock(&adapter->stats64_lock); | |
12 | - e1000e_update_stats(adapter); | |
13 | + if (spin_trylock(&adapter->stats64_lock)) { | |
14 | + e1000e_update_stats(adapter); | |
15 | + has_lock = 1; | |
16 | + } | |
17 | + | |
18 | /* Fill out the OS statistics structure */ | |
19 | stats->rx_bytes = adapter->stats.gorc; | |
20 | stats->rx_packets = adapter->stats.gprc; | |
21 | @@ -5957,7 +5961,7 @@ | |
22 | ||
23 | /* Tx Dropped needs to be maintained elsewhere */ | |
24 | ||
25 | - spin_unlock(&adapter->stats64_lock); | |
26 | + if (has_lock) spin_unlock(&adapter->stats64_lock); | |
27 | return stats; | |
28 | } | |
29 | ||
30 | diff -Naur linux-4.9.17.org/drivers/net/ethernet/intel/igb/igb_main.c linux-4.9.17/drivers/net/ethernet/intel/igb/igb_main.c | |
31 | --- linux-4.9.17.org/drivers/net/ethernet/intel/igb/igb_main.c 2017-03-22 12:44:07.000000000 +0100 | |
32 | +++ linux-4.9.17/drivers/net/ethernet/intel/igb/igb_main.c 2017-03-26 16:02:46.820093793 +0200 | |
33 | @@ -5391,10 +5391,11 @@ | |
34 | { | |
35 | struct igb_adapter *adapter = netdev_priv(netdev); | |
36 | ||
37 | - spin_lock(&adapter->stats64_lock); | |
38 | - igb_update_stats(adapter, &adapter->stats64); | |
39 | + if (spin_trylock(&adapter->stats64_lock)) { | |
40 | + igb_update_stats(adapter, &adapter->stats64); | |
41 | + spin_unlock(&adapter->stats64_lock); | |
42 | + } | |
43 | memcpy(stats, &adapter->stats64, sizeof(*stats)); | |
44 | - spin_unlock(&adapter->stats64_lock); | |
45 | ||
46 | return stats; | |
47 | } |