From: Johannes Berg <johannes@sipsolutions.net>
To: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
Cc: davem@davemloft.net, linux-wireless@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
joel@joelfernandes.org, frextrite@gmail.com,
linux-kernel-mentees@lists.linuxfoundation.org,
paulmck@kernel.org
Subject: Re: [PATCH] net: mac80211: rx.c: Use built-in RCU list checking
Date: Sat, 22 Feb 2020 14:54:47 +0100 [thread overview]
Message-ID: <229913c0b0481c3572032b2f64ce0202f5c66c23.camel@sipsolutions.net> (raw)
In-Reply-To: <20200222133928.GA10397@madhuparna-HP-Notebook> (sfid-20200222_143938_994762_F2980624)
> If list_for_each_entry_rcu() is called from non rcu protection
> i.e without holding rcu_read_lock, but under the protection of
> a different lock then we can pass that as the condition for lockdep checking
> because otherwise lockdep will complain if list_for_each_entry_rcu()
> is used without rcu protection. So, if we do not pass this argument
> (cond) it may lead to false lockdep warnings.
Sure. But what's the specific warning you see?
> > > - list_for_each_entry_rcu(sdata, &local->interfaces, list) {
> > > + list_for_each_entry_rcu(sdata, &local->interfaces, list,
> > > + lockdep_is_held(&rx->local->rx_path_lock)) {
> > > if (!ieee80211_sdata_running(sdata))
> > > continue;
> >
> > This is not related at all.
>
> I analysed the following traces:
> ieee80211_rx_handlers() -> ieee80211_rx_handlers_result() -> ieee80211_rx_cooked_monitor()
>
> here ieee80211_rx_handlers() is holding the rx->local->rx_path_lock and
> therefore I used this for the cond argument.
>
> If this is not right, can you help me in figuring out that which other
> lock is held?
It's _clearly_ not right, that's the RX spinlock, it has nothing to do
with the interface list.
But I'd have to see the warning. Perhaps the driver you're using is
wrongly calling something in the stack.
> > > lockdep_assert_held(&local->sta_mtx);
> > >
> > > - list_for_each_entry_rcu(sta, &local->sta_list, list) {
> > > + list_for_each_entry_rcu(sta, &local->sta_list, list,
> > > + lockdep_is_held(&local->sta_mtx)) {
> >
> > And this isn't even a real RCU iteration, since we _must_ hold the mutex
> > here.
> >
> Yeah exactly, dropping _rcu (use list_for_each_entry()) would be a good option in this case.
> Let me know if that is alright and I will send a new patch with all the
> changes required.
Seems fine, also better to split the patches anyway.
johannes
prev parent reply other threads:[~2020-02-22 13:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-22 10:18 [PATCH] net: mac80211: rx.c: Use built-in RCU list checking madhuparnabhowmik10
2020-02-22 12:53 ` Johannes Berg
2020-02-22 13:39 ` Madhuparna Bhowmik
2020-02-22 13:54 ` Johannes Berg [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=229913c0b0481c3572032b2f64ce0202f5c66c23.camel@sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=davem@davemloft.net \
--cc=frextrite@gmail.com \
--cc=joel@joelfernandes.org \
--cc=linux-kernel-mentees@lists.linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=madhuparnabhowmik10@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=paulmck@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox