CHROMIUM: mesh: remove mpp path debug dump
remove mpp_path_table_debug_dump from rx path because
rhashtable_walk_enter is preempt-able and could sleep.
A deadlock happens when rhashtable_walk_enter is called
from worker thread with softirq enabled, and it's
preempted by softirq while holding a lock, then
mpp_path_table_debug_dump is called from net_rx_action
in softirq to grab the same lock.
BUG=b:168345283
TEST=emerge-gale kernel-3_18
Signed-off-by: Roy Luo <royluo@google.com>
Change-Id: I24202bb70b335ce70ad7135ef3e892a94d16e17f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2409663
Reviewed-by: Kan Yan <kyan@chromium.org>
(cherry picked from commit a03616d2a3d9d4fb17b7089e485fbe0f22c02394)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2464713
Reviewed-by: Srinivasa duvvuri <sduvvuri@google.com>
Commit-Queue: Srinivasa duvvuri <sduvvuri@google.com>
Tested-by: Srinivasa duvvuri <sduvvuri@google.com>
diff --git a/net/mac80211-4.2/rx.c b/net/mac80211-4.2/rx.c
index 2cdd197..e19b9bf4 100644
--- a/net/mac80211-4.2/rx.c
+++ b/net/mac80211-4.2/rx.c
@@ -2240,7 +2240,6 @@
struct mesh_path *mppath;
char *proxied_addr;
char *mpp_addr;
- bool mpp_table_updated = 0;
if (is_multicast_ether_addr(hdr->addr1)) {
mpp_addr = hdr->addr3;
@@ -2259,11 +2258,12 @@
if (!mppath) {
mpp_path_add(sdata, proxied_addr, mpp_addr);
rcu_read_unlock();
- mpath_dbg(sdata, "MESH MPPU add mpp %pM dest %pM \n",
- mpp_addr, proxied_addr);
- mpp_table_updated = 1;
+ mpath_dbg(sdata, "MESH MPPU add mpp %pM dest %pM\n",
+ mpp_addr, proxied_addr);
} else {
u8 old_mpp[ETH_ALEN];
+ bool mpp_table_updated = 0;
+
spin_lock_bh(&mppath->state_lock);
if (!ether_addr_equal(mppath->mpp, mpp_addr)) {
memcpy(old_mpp, mppath->mpp, ETH_ALEN);
@@ -2278,9 +2278,6 @@
old_mpp,mpp_addr, proxied_addr);
}
}
- if (mpp_table_updated) {
- mpp_path_table_debug_dump(sdata);
- }
}
/* Frame has reached destination. Don't forward */