Message ID | 1367536279-14241-1-git-send-email-thomas@cozybit.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Thu, 2013-05-02 at 16:11 -0700, Thomas Pedersen wrote: > When running a kernel with CONFIG_PROVE_RCU, the minstrel > rate update code would complain about being called without > the RCU read lock held. This is because > mesh_sta_info_init() may or may not have been called under > RCU read lock. Perform some bureaucratic critical section > toggling to always call mesh_sta_info_init() under RCU, > and silence this warning. This was discussed in another thread a while ago, but unfortunately nothing came out of it. I really don't think this is the right solution, since the code that this calls doesn't even use rcu_dereference() properly. Felix, please come up with a proper fix soon, otherwise I'm going to revert your changes for 3.10. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index 09bebed..4058bd7 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c @@ -473,13 +473,15 @@ mesh_sta_info_get(struct ieee80211_sub_if_data *sdata, rcu_read_unlock(); /* can't run atomic */ sta = mesh_sta_info_alloc(sdata, addr, elems); - if (!sta) { - rcu_read_lock(); + + rcu_read_lock(); + if (!sta) return NULL; - } mesh_sta_info_init(sdata, sta, elems, true); + rcu_read_unlock(); + /* also might sleep */ if (sta_info_insert_rcu(sta)) return NULL; }
When running a kernel with CONFIG_PROVE_RCU, the minstrel rate update code would complain about being called without the RCU read lock held. This is because mesh_sta_info_init() may or may not have been called under RCU read lock. Perform some bureaucratic critical section toggling to always call mesh_sta_info_init() under RCU, and silence this warning. Signed-off-by: Thomas Pedersen <thomas@cozybit.com> --- net/mac80211/mesh_plink.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)