On Thu, 2012-08-02 at 18:55 -0400, Paul Gortmaker wrote: > From: Liang Li <liang.li@xxxxxxxxxxxxx> > > partial of commit 8e8b41f9d8c8e63fc92f899ace8da91a490ac573 upstream. Added to the queue for 3.2, thanks. Ben. > As part of commit 463454b5dbd8 ("cfg80211: fix interface > combinations check"), this extra check was introduced: > > if ((all_iftypes & used_iftypes) != used_iftypes) > goto cont; > > However, most wireless NIC drivers did not advertise ADHOC in > wiphy.iface_combinations[i].limits[] and hence we'll get -EBUSY > when we bring up a ADHOC wlan with commands similar to: > > # iwconfig wlan0 mode ad-hoc && ifconfig wlan0 up > > In commit 8e8b41f9d8c8e ("cfg80211: enforce lack of interface > combinations"), the change below fixes the issue: > > if (total == 1) > return 0; > > But it also introduces other dependencies for stable. For example, > a full cherry pick of 8e8b41f9d8c8e would introduce additional > regressions unless we also start cherry picking driver specific > fixes like the following: > > 9b4760e ath5k: add possible wiphy interface combinations > 1ae2fc2 mac80211_hwsim: advertise interface combinations > 20c8e8d ath9k: add possible wiphy interface combinations > > And the purpose of the 'if (total == 1)' is to cover the specific > use case (IBSS, adhoc) that was mentioned above. So we just pick > the specific part out from 8e8b41f9d8c8e here. > > Doing so gives stable kernels a way to fix the change introduced > by 463454b5dbd8, without having to make cherry picks specific to > various NIC drivers. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Liang Li <liang.li@xxxxxxxxxxxxx> > Signed-off-by: Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx> > --- > > 3.0.35, 3.2.21 and 3.4.3 have CP of 463454b5dbd8 in them. > > net/wireless/util.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/net/wireless/util.c b/net/wireless/util.c > index b5b6890..88bd89e 100644 > --- a/net/wireless/util.c > +++ b/net/wireless/util.c > @@ -974,6 +974,9 @@ int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev, > } > mutex_unlock(&rdev->devlist_mtx); > > + if (total == 1) > + return 0; > + > for (i = 0; i < rdev->wiphy.n_iface_combinations; i++) { > const struct ieee80211_iface_combination *c; > struct ieee80211_iface_limit *limits; -- Ben Hutchings Theory and practice are closer in theory than in practice. - John Levine, moderator of comp.compilers
Attachment:
signature.asc
Description: This is a digitally signed message part