From: Igor Mitsyanko <[email protected]>

Wireless core calls regulatory notifier for each wiphy and it only
guarantees that bands info is updated for this particular wiphy prior
to calling a notifier. Hence updating all wiphy which belong to driver
in a single notifier callback is redundant and incorrect.

Signed-off-by: Igor Mitsyanko <[email protected]>
---
 drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 32 +++++++----------------
 drivers/net/wireless/quantenna/qtnfmac/commands.c |  9 +++----
 drivers/net/wireless/quantenna/qtnfmac/commands.h |  2 +-
 3 files changed, 13 insertions(+), 30 deletions(-)

diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c 
b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index dcb0991432f4..295890b2673c 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -993,20 +993,17 @@ static struct cfg80211_ops qtn_cfg80211_ops = {
 #endif
 };
 
-static void qtnf_cfg80211_reg_notifier(struct wiphy *wiphy_in,
+static void qtnf_cfg80211_reg_notifier(struct wiphy *wiphy,
                                       struct regulatory_request *req)
 {
-       struct qtnf_wmac *mac = wiphy_priv(wiphy_in);
-       struct qtnf_bus *bus = mac->bus;
-       struct wiphy *wiphy;
-       unsigned int mac_idx;
+       struct qtnf_wmac *mac = wiphy_priv(wiphy);
        enum nl80211_band band;
        int ret;
 
        pr_debug("MAC%u: initiator=%d alpha=%c%c\n", mac->macid, req->initiator,
                 req->alpha2[0], req->alpha2[1]);
 
-       ret = qtnf_cmd_reg_notify(bus, req);
+       ret = qtnf_cmd_reg_notify(mac, req);
        if (ret) {
                if (ret == -EOPNOTSUPP) {
                        pr_warn("reg update not supported\n");
@@ -1021,25 +1018,14 @@ static void qtnf_cfg80211_reg_notifier(struct wiphy 
*wiphy_in,
                return;
        }
 
-       for (mac_idx = 0; mac_idx < QTNF_MAX_MAC; ++mac_idx) {
-               if (!(bus->hw_info.mac_bitmap & (1 << mac_idx)))
-                       continue;
-
-               mac = bus->mac[mac_idx];
-               if (!mac)
+       for (band = 0; band < NUM_NL80211_BANDS; ++band) {
+               if (!wiphy->bands[band])
                        continue;
 
-               wiphy = priv_to_wiphy(mac);
-
-               for (band = 0; band < NUM_NL80211_BANDS; ++band) {
-                       if (!wiphy->bands[band])
-                               continue;
-
-                       ret = qtnf_cmd_band_info_get(mac, wiphy->bands[band]);
-                       if (ret)
-                               pr_err("failed to get chan info for mac %u band 
%u\n",
-                                      mac_idx, band);
-               }
+               ret = qtnf_cmd_band_info_get(mac, wiphy->bands[band]);
+               if (ret)
+                       pr_err("MAC%u: failed to update band %u\n",
+                              mac->macid, band);
        }
 }
 
diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c 
b/drivers/net/wireless/quantenna/qtnfmac/commands.c
index 85a2a58f4c16..9aabba7429ed 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
@@ -2404,13 +2404,14 @@ int qtnf_cmd_send_updown_intf(struct qtnf_vif *vif, 
bool up)
        return ret;
 }
 
-int qtnf_cmd_reg_notify(struct qtnf_bus *bus, struct regulatory_request *req)
+int qtnf_cmd_reg_notify(struct qtnf_wmac *mac, struct regulatory_request *req)
 {
+       struct qtnf_bus *bus = mac->bus;
        struct sk_buff *cmd_skb;
        int ret;
        struct qlink_cmd_reg_notify *cmd;
 
-       cmd_skb = qtnf_cmd_alloc_new_cmdskb(QLINK_MACID_RSVD, QLINK_VIFID_RSVD,
+       cmd_skb = qtnf_cmd_alloc_new_cmdskb(mac->macid, QLINK_VIFID_RSVD,
                                            QLINK_CMD_REG_NOTIFY,
                                            sizeof(*cmd));
        if (!cmd_skb)
@@ -2449,10 +2450,6 @@ int qtnf_cmd_reg_notify(struct qtnf_bus *bus, struct 
regulatory_request *req)
 
        qtnf_bus_lock(bus);
        ret = qtnf_cmd_send(bus, cmd_skb);
-       if (ret)
-               goto out;
-
-out:
        qtnf_bus_unlock(bus);
 
        return ret;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.h 
b/drivers/net/wireless/quantenna/qtnfmac/commands.h
index 64f0b9dc8a14..050f9a49d16c 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/commands.h
+++ b/drivers/net/wireless/quantenna/qtnfmac/commands.h
@@ -57,7 +57,7 @@ int qtnf_cmd_send_disconnect(struct qtnf_vif *vif,
                             u16 reason_code);
 int qtnf_cmd_send_updown_intf(struct qtnf_vif *vif,
                              bool up);
-int qtnf_cmd_reg_notify(struct qtnf_bus *bus, struct regulatory_request *req);
+int qtnf_cmd_reg_notify(struct qtnf_wmac *mac, struct regulatory_request *req);
 int qtnf_cmd_get_chan_stats(struct qtnf_wmac *mac, u16 channel,
                            struct qtnf_chan_stats *stats);
 int qtnf_cmd_send_chan_switch(struct qtnf_vif *vif,
-- 
2.11.0

Reply via email to