Brent Pappas <bpappas@xxxxxxxxxxxxxxx> writes: > Annotates ieee80211_set_beacon_cntdwn() with a __must_hold() annotation to > make it clear that ieee80211_set_beacon_cntdwn() is only intended to be > called when the caller has a lock on the argument "link." > > Signed-off-by: Brent Pappas <bpappas@xxxxxxxxxxxxxxx> > --- > > Currently, ieee80211_set_beacon_cntdwn() calls rcu_dereference(), but > without calling rcu_read_lock() beforehand and rcu_read_unlock() > afterward. At first I thought this was a bug, since (if I understand the > RCU API correctly) rcu_dereference() should only be called in RCU > read-side critical sections. However, upon closer inspection of the code, > I realized that ieee80211_set_beacon_cntdwn() is only ever called inside > critical sections. Therefore it seems appropriate to me to annotate > ieee80211_set_beacon_cntdwn() with a __must_hold() annotation to make this > apparent precondition explicit. > > This is my first time submitting an RCU-related patch so please tell me if > I am misunderstanding the RCU API. > > net/mac80211/tx.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c > index 314998fdb1a5..7245f2e641ba 100644 > --- a/net/mac80211/tx.c > +++ b/net/mac80211/tx.c > @@ -10,6 +10,7 @@ > * Transmit and frame generation functions. > */ > > +#include "linux/compiler_types.h" > #include <linux/kernel.h> > #include <linux/slab.h> > #include <linux/skbuff.h> > @@ -4974,6 +4975,7 @@ static int ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata, > static void ieee80211_set_beacon_cntdwn(struct ieee80211_sub_if_data *sdata, > struct beacon_data *beacon, > struct ieee80211_link_data *link) > + __must_hold(link) Oh, never seen __must_hold() before and looks very useful. So does this work with RCU, mutexes and spinlocks? In case others are interested, here's the documentation I was able to find: https://docs.kernel.org/dev-tools/sparse.html#using-sparse-for-lock-checking -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches