]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
wifi: rtl8xxxu: support multiple interfaces in watchdog_callback()
authorMartin Kaistra <martin.kaistra@linutronix.de>
Fri, 22 Dec 2023 10:14:34 +0000 (11:14 +0100)
committerKalle Valo <kvalo@kernel.org>
Wed, 10 Jan 2024 14:52:57 +0000 (16:52 +0200)
Check first whether priv->vifs[0] exists and is of type STATION, then go
to priv->vifs[1]. Make sure to call refresh_rate_mask for both
interfaces.

Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231222101442.626837-14-martin.kaistra@linutronix.de
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index 16a87e1cef61bb15d903aee8cd2a21fa37c1dd6f..5f33171010b27873b7f34310c9e4322911f57ff5 100644 (file)
@@ -7200,11 +7200,15 @@ static void rtl8xxxu_watchdog_callback(struct work_struct *work)
 {
        struct ieee80211_vif *vif;
        struct rtl8xxxu_priv *priv;
+       int i;
 
        priv = container_of(work, struct rtl8xxxu_priv, ra_watchdog.work);
-       vif = priv->vif;
+       for (i = 0; i < ARRAY_SIZE(priv->vifs); i++) {
+               vif = priv->vifs[i];
+
+               if (!vif || vif->type != NL80211_IFTYPE_STATION)
+                       continue;
 
-       if (vif && vif->type == NL80211_IFTYPE_STATION) {
                int signal;
                struct ieee80211_sta *sta;
 
@@ -7215,22 +7219,21 @@ static void rtl8xxxu_watchdog_callback(struct work_struct *work)
 
                        dev_dbg(dev, "%s: no sta found\n", __func__);
                        rcu_read_unlock();
-                       goto out;
+                       continue;
                }
                rcu_read_unlock();
 
                signal = ieee80211_ave_rssi(vif);
 
-               priv->fops->report_rssi(priv, 0,
+               priv->fops->report_rssi(priv, rtl8xxxu_get_macid(priv, sta),
                                        rtl8xxxu_signal_to_snr(signal));
 
-               if (priv->fops->set_crystal_cap)
-                       rtl8xxxu_track_cfo(priv);
-
                rtl8xxxu_refresh_rate_mask(priv, signal, sta, false);
        }
 
-out:
+       if (priv->fops->set_crystal_cap)
+               rtl8xxxu_track_cfo(priv);
+
        schedule_delayed_work(&priv->ra_watchdog, 2 * HZ);
 }