mwifiex: Small cleanup for handling virtual interface type changes
authorJonas Dreßler <verdre@v0yd.nl>
Tue, 14 Sep 2021 19:59:01 +0000 (21:59 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 21 Sep 2021 15:02:16 +0000 (18:02 +0300)
Handle the obvious invalid virtual interface type changes with a general
check instead of looking at the individual change.

For type changes from P2P_CLIENT to P2P_GO and the other way round, this
changes the behavior slightly: We now still do nothing, but return
-EOPNOTSUPP instead of 0. Now that behavior was incorrect before and
still is, because type changes between these two types are actually
possible and supported, which we'll fix in a following commit.

Signed-off-by: Jonas Dreßler <verdre@v0yd.nl>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210914195909.36035-2-verdre@v0yd.nl
drivers/net/wireless/marvell/mwifiex/cfg80211.c

index 0961f4a..e8deba1 100644 (file)
@@ -1141,6 +1141,20 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
                return -EBUSY;
        }
 
+       if (type == NL80211_IFTYPE_UNSPECIFIED) {
+               mwifiex_dbg(priv->adapter, INFO,
+                           "%s: no new type specified, keeping old type %d\n",
+                           dev->name, curr_iftype);
+               return 0;
+       }
+
+       if (curr_iftype == type) {
+               mwifiex_dbg(priv->adapter, INFO,
+                           "%s: interface already is of type %d\n",
+                           dev->name, curr_iftype);
+               return 0;
+       }
+
        switch (curr_iftype) {
        case NL80211_IFTYPE_ADHOC:
                switch (type) {
@@ -1160,12 +1174,6 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
                case NL80211_IFTYPE_AP:
                        return mwifiex_change_vif_to_ap(dev, curr_iftype, type,
                                                        params);
-               case NL80211_IFTYPE_UNSPECIFIED:
-                       mwifiex_dbg(priv->adapter, INFO,
-                                   "%s: kept type as IBSS\n", dev->name);
-                       fallthrough;
-               case NL80211_IFTYPE_ADHOC:      /* This shouldn't happen */
-                       return 0;
                default:
                        mwifiex_dbg(priv->adapter, ERROR,
                                    "%s: changing to %d not supported\n",
@@ -1191,12 +1199,6 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
                case NL80211_IFTYPE_AP:
                        return mwifiex_change_vif_to_ap(dev, curr_iftype, type,
                                                        params);
-               case NL80211_IFTYPE_UNSPECIFIED:
-                       mwifiex_dbg(priv->adapter, INFO,
-                                   "%s: kept type as STA\n", dev->name);
-                       fallthrough;
-               case NL80211_IFTYPE_STATION:    /* This shouldn't happen */
-                       return 0;
                default:
                        mwifiex_dbg(priv->adapter, ERROR,
                                    "%s: changing to %d not supported\n",
@@ -1214,12 +1216,6 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
                case NL80211_IFTYPE_P2P_GO:
                        return mwifiex_change_vif_to_p2p(dev, curr_iftype,
                                                         type, params);
-               case NL80211_IFTYPE_UNSPECIFIED:
-                       mwifiex_dbg(priv->adapter, INFO,
-                                   "%s: kept type as AP\n", dev->name);
-                       fallthrough;
-               case NL80211_IFTYPE_AP:         /* This shouldn't happen */
-                       return 0;
                default:
                        mwifiex_dbg(priv->adapter, ERROR,
                                    "%s: changing to %d not supported\n",
@@ -1254,13 +1250,6 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
                                return -EFAULT;
                        return mwifiex_change_vif_to_ap(dev, curr_iftype, type,
                                                        params);
-               case NL80211_IFTYPE_UNSPECIFIED:
-                       mwifiex_dbg(priv->adapter, INFO,
-                                   "%s: kept type as P2P\n", dev->name);
-                       fallthrough;
-               case NL80211_IFTYPE_P2P_CLIENT:
-               case NL80211_IFTYPE_P2P_GO:
-                       return 0;
                default:
                        mwifiex_dbg(priv->adapter, ERROR,
                                    "%s: changing to %d not supported\n",