rtlwifi: rtl8821ae: Fix potential race condition
[deliverable/linux.git] / drivers / net / wireless / realtek / rtlwifi / rtl8821ae / dm.c
index 17a681788611a7019ec4d11a88b5914cf1006f4d..03e08cb74184ca0acd80024895edcbf2ee439239 100644 (file)
@@ -1355,7 +1355,7 @@ void rtl8812ae_dm_txpwr_track_set_pwr(struct ieee80211_hw *hw,
        u32 final_swing_idx[2];
        u8 pwr_tracking_limit = 26; /*+1.0dB*/
        u8 tx_rate = 0xFF;
-       char final_ofdm_swing_index = 0;
+       s8 final_ofdm_swing_index = 0;
 
        if (rtldm->tx_rate != 0xFF)
                tx_rate =
@@ -2045,7 +2045,7 @@ void rtl8821ae_dm_txpwr_track_set_pwr(struct ieee80211_hw *hw,
        u32 final_swing_idx[1];
        u8 pwr_tracking_limit = 26; /*+1.0dB*/
        u8 tx_rate = 0xFF;
-       char final_ofdm_swing_index = 0;
+       s8 final_ofdm_swing_index = 0;
 
        if (rtldm->tx_rate != 0xFF)
                tx_rate = rtl8821ae_hw_rate_to_mrate(hw, rtldm->tx_rate);
@@ -2949,6 +2949,7 @@ void rtl8821ae_dm_watchdog(struct ieee80211_hw *hw)
        if (ppsc->p2p_ps_info.p2p_ps_mode)
                fw_ps_awake = false;
 
+       spin_lock(&rtlpriv->locks.rf_ps_lock);
        if ((ppsc->rfpwr_state == ERFON) &&
            ((!fw_current_inpsmode) && fw_ps_awake) &&
            (!ppsc->rfchange_inprogress)) {
@@ -2967,6 +2968,7 @@ void rtl8821ae_dm_watchdog(struct ieee80211_hw *hw)
                        rtl8821ae_dm_check_txpower_tracking_thermalmeter(hw);
                rtl8821ae_dm_iq_calibrate(hw);
        }
+       spin_unlock(&rtlpriv->locks.rf_ps_lock);
 
        rtlpriv->dm.dbginfo.num_qry_beacon_pkt = 0;
        RT_TRACE(rtlpriv, COMP_DIG, DBG_DMESG, "\n");
This page took 0.026537 seconds and 5 git commands to generate.