]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/linux/linux-4.9.17-igb-e1000e_fix_lock_at_update_stats.patch
xtables-addons: disable DNETMAP module
[people/pmueller/ipfire-2.x.git] / src / patches / linux / linux-4.9.17-igb-e1000e_fix_lock_at_update_stats.patch
CommitLineData
fcffac13
AF
1diff -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
30diff -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 }