On Tue, Mar 18, 2014 at 3:53 PM, Michal Kazior <michal.kazior@xxxxxxxxx> wrote: > Use a separate function to look for reservation > chanctx. For multi-interface/channel reservation > search sematics differ slightly. > > The new routine allows reservations to be merged > with chanctx that are already reserved by other > interface(s). > > Signed-off-by: Michal Kazior <michal.kazior@xxxxxxxxx> > --- [...] > +static const struct cfg80211_chan_def * > +ieee80211_chanctx_non_reserved_chandef(struct ieee80211_local *local, > + struct ieee80211_chanctx *ctx, > + const struct cfg80211_chan_def *compat) > +{ > + struct ieee80211_sub_if_data *sdata; > + > + lockdep_assert_held(&local->chanctx_mtx); > + > + list_for_each_entry(sdata, &ctx->assigned_vifs, > + assigned_chanctx_list) { > + if (rcu_access_pointer(sdata->reserved_chanctx) != NULL) > + continue; this is not rcu pointer... > +static const struct cfg80211_chan_def * > +ieee80211_chanctx_combined_chandef(struct ieee80211_local *local, > + struct ieee80211_chanctx *ctx, > + const struct cfg80211_chan_def *compat) > +{ > + lockdep_assert_held(&local->chanctx_mtx); > + > + compat = ieee80211_chanctx_reserved_chandef(local, ctx, compat); > + if (!compat) > + return NULL; > + > + compat = ieee80211_chanctx_non_reserved_chandef(local, ctx, compat); > + if (!compat) > + return NULL; > + > + return compat; > +} > + > +static bool > +ieee80211_chanctx_can_reserve_chandef(struct ieee80211_local *local, > + struct ieee80211_chanctx *ctx, > + const struct cfg80211_chan_def *def) > +{ > + lockdep_assert_held(&local->chanctx_mtx); > + > + if (ieee80211_chanctx_combined_chandef(local, ctx, NULL) && > + ieee80211_chanctx_combined_chandef(local, ctx, def)) > + return true; > + what's the reason for calling it with NULL? > + if (!list_empty(&ctx->reserved_vifs) && > + ieee80211_chanctx_reserved_chandef(local, ctx, NULL) && > + ieee80211_chanctx_reserved_chandef(local, ctx, def)) > + return true; and this seems redundant as _combined_chandef() should already check for it? Eliad. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html