diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-12 02:29:09 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-12 05:39:45 -0500 |
commit | ec3d5c521af86e53690c8850def2d2f6a35e7756 (patch) | |
tree | 3c5e1e80a0292ecedc318244e15876fd63c3282e /drivers/net/wireless | |
parent | cf365b117388a50902d56988e69dd6f70b7662fc (diff) |
Revert "rtlwifi: Fix enter/exit power_save"
This reverts commit 98068574928f499b30f136ff57ef9a03cc575a36, which is
commit ba9f93f82abafe2552eac942ebb11c2df4f8dd7f upstream as it causes
problems.
Reported-by: Dmitry Osipenko <digetx@gmail.com>
Cc: Ping-Ke Shih <pkshih@realtek.com>
Cc: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/base.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/core.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/pci.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/ps.c | 36 |
4 files changed, 27 insertions, 40 deletions
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c index 4ac928bf1f8e..264466f59c57 100644 --- a/drivers/net/wireless/realtek/rtlwifi/base.c +++ b/drivers/net/wireless/realtek/rtlwifi/base.c | |||
@@ -1303,13 +1303,12 @@ EXPORT_SYMBOL_GPL(rtl_action_proc); | |||
1303 | 1303 | ||
1304 | static void setup_arp_tx(struct rtl_priv *rtlpriv, struct rtl_ps_ctl *ppsc) | 1304 | static void setup_arp_tx(struct rtl_priv *rtlpriv, struct rtl_ps_ctl *ppsc) |
1305 | { | 1305 | { |
1306 | struct ieee80211_hw *hw = rtlpriv->hw; | ||
1307 | |||
1308 | rtlpriv->ra.is_special_data = true; | 1306 | rtlpriv->ra.is_special_data = true; |
1309 | if (rtlpriv->cfg->ops->get_btc_status()) | 1307 | if (rtlpriv->cfg->ops->get_btc_status()) |
1310 | rtlpriv->btcoexist.btc_ops->btc_special_packet_notify( | 1308 | rtlpriv->btcoexist.btc_ops->btc_special_packet_notify( |
1311 | rtlpriv, 1); | 1309 | rtlpriv, 1); |
1312 | rtl_lps_leave(hw); | 1310 | rtlpriv->enter_ps = false; |
1311 | schedule_work(&rtlpriv->works.lps_change_work); | ||
1313 | ppsc->last_delaylps_stamp_jiffies = jiffies; | 1312 | ppsc->last_delaylps_stamp_jiffies = jiffies; |
1314 | } | 1313 | } |
1315 | 1314 | ||
@@ -1382,7 +1381,8 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx, | |||
1382 | 1381 | ||
1383 | if (is_tx) { | 1382 | if (is_tx) { |
1384 | rtlpriv->ra.is_special_data = true; | 1383 | rtlpriv->ra.is_special_data = true; |
1385 | rtl_lps_leave(hw); | 1384 | rtlpriv->enter_ps = false; |
1385 | schedule_work(&rtlpriv->works.lps_change_work); | ||
1386 | ppsc->last_delaylps_stamp_jiffies = jiffies; | 1386 | ppsc->last_delaylps_stamp_jiffies = jiffies; |
1387 | } | 1387 | } |
1388 | 1388 | ||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c index 4da4e458142c..8e7f23c11680 100644 --- a/drivers/net/wireless/realtek/rtlwifi/core.c +++ b/drivers/net/wireless/realtek/rtlwifi/core.c | |||
@@ -1150,8 +1150,10 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, | |||
1150 | } else { | 1150 | } else { |
1151 | mstatus = RT_MEDIA_DISCONNECT; | 1151 | mstatus = RT_MEDIA_DISCONNECT; |
1152 | 1152 | ||
1153 | if (mac->link_state == MAC80211_LINKED) | 1153 | if (mac->link_state == MAC80211_LINKED) { |
1154 | rtl_lps_leave(hw); | 1154 | rtlpriv->enter_ps = false; |
1155 | schedule_work(&rtlpriv->works.lps_change_work); | ||
1156 | } | ||
1155 | if (ppsc->p2p_ps_info.p2p_ps_mode > P2P_PS_NONE) | 1157 | if (ppsc->p2p_ps_info.p2p_ps_mode > P2P_PS_NONE) |
1156 | rtl_p2p_ps_cmd(hw, P2P_PS_DISABLE); | 1158 | rtl_p2p_ps_cmd(hw, P2P_PS_DISABLE); |
1157 | mac->link_state = MAC80211_NOLINK; | 1159 | mac->link_state = MAC80211_NOLINK; |
@@ -1429,7 +1431,8 @@ static void rtl_op_sw_scan_start(struct ieee80211_hw *hw, | |||
1429 | } | 1431 | } |
1430 | 1432 | ||
1431 | if (mac->link_state == MAC80211_LINKED) { | 1433 | if (mac->link_state == MAC80211_LINKED) { |
1432 | rtl_lps_leave(hw); | 1434 | rtlpriv->enter_ps = false; |
1435 | schedule_work(&rtlpriv->works.lps_change_work); | ||
1433 | mac->link_state = MAC80211_LINKED_SCANNING; | 1436 | mac->link_state = MAC80211_LINKED_SCANNING; |
1434 | } else { | 1437 | } else { |
1435 | rtl_ips_nic_on(hw); | 1438 | rtl_ips_nic_on(hw); |
diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c index 5be4fc96002d..0dfa9eac3926 100644 --- a/drivers/net/wireless/realtek/rtlwifi/pci.c +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c | |||
@@ -663,9 +663,11 @@ tx_status_ok: | |||
663 | } | 663 | } |
664 | 664 | ||
665 | if (((rtlpriv->link_info.num_rx_inperiod + | 665 | if (((rtlpriv->link_info.num_rx_inperiod + |
666 | rtlpriv->link_info.num_tx_inperiod) > 8) || | 666 | rtlpriv->link_info.num_tx_inperiod) > 8) || |
667 | (rtlpriv->link_info.num_rx_inperiod > 2)) | 667 | (rtlpriv->link_info.num_rx_inperiod > 2)) { |
668 | rtl_lps_leave(hw); | 668 | rtlpriv->enter_ps = false; |
669 | schedule_work(&rtlpriv->works.lps_change_work); | ||
670 | } | ||
669 | } | 671 | } |
670 | 672 | ||
671 | static int _rtl_pci_init_one_rxdesc(struct ieee80211_hw *hw, | 673 | static int _rtl_pci_init_one_rxdesc(struct ieee80211_hw *hw, |
@@ -916,8 +918,10 @@ new_trx_end: | |||
916 | } | 918 | } |
917 | if (((rtlpriv->link_info.num_rx_inperiod + | 919 | if (((rtlpriv->link_info.num_rx_inperiod + |
918 | rtlpriv->link_info.num_tx_inperiod) > 8) || | 920 | rtlpriv->link_info.num_tx_inperiod) > 8) || |
919 | (rtlpriv->link_info.num_rx_inperiod > 2)) | 921 | (rtlpriv->link_info.num_rx_inperiod > 2)) { |
920 | rtl_lps_leave(hw); | 922 | rtlpriv->enter_ps = false; |
923 | schedule_work(&rtlpriv->works.lps_change_work); | ||
924 | } | ||
921 | skb = new_skb; | 925 | skb = new_skb; |
922 | no_new: | 926 | no_new: |
923 | if (rtlpriv->use_new_trx_flow) { | 927 | if (rtlpriv->use_new_trx_flow) { |
diff --git a/drivers/net/wireless/realtek/rtlwifi/ps.c b/drivers/net/wireless/realtek/rtlwifi/ps.c index d0ffc4d508cf..18d979affc18 100644 --- a/drivers/net/wireless/realtek/rtlwifi/ps.c +++ b/drivers/net/wireless/realtek/rtlwifi/ps.c | |||
@@ -407,8 +407,8 @@ void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode) | |||
407 | } | 407 | } |
408 | } | 408 | } |
409 | 409 | ||
410 | /* Interrupt safe routine to enter the leisure power save mode.*/ | 410 | /*Enter the leisure power save mode.*/ |
411 | static void rtl_lps_enter_core(struct ieee80211_hw *hw) | 411 | void rtl_lps_enter(struct ieee80211_hw *hw) |
412 | { | 412 | { |
413 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); | 413 | struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); |
414 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); | 414 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); |
@@ -444,9 +444,10 @@ static void rtl_lps_enter_core(struct ieee80211_hw *hw) | |||
444 | 444 | ||
445 | spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag); | 445 | spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag); |
446 | } | 446 | } |
447 | EXPORT_SYMBOL(rtl_lps_enter); | ||
447 | 448 | ||
448 | /* Interrupt safe routine to leave the leisure power save mode.*/ | 449 | /*Leave the leisure power save mode.*/ |
449 | static void rtl_lps_leave_core(struct ieee80211_hw *hw) | 450 | void rtl_lps_leave(struct ieee80211_hw *hw) |
450 | { | 451 | { |
451 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 452 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
452 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); | 453 | struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); |
@@ -476,6 +477,7 @@ static void rtl_lps_leave_core(struct ieee80211_hw *hw) | |||
476 | } | 477 | } |
477 | spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag); | 478 | spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flag); |
478 | } | 479 | } |
480 | EXPORT_SYMBOL(rtl_lps_leave); | ||
479 | 481 | ||
480 | /* For sw LPS*/ | 482 | /* For sw LPS*/ |
481 | void rtl_swlps_beacon(struct ieee80211_hw *hw, void *data, unsigned int len) | 483 | void rtl_swlps_beacon(struct ieee80211_hw *hw, void *data, unsigned int len) |
@@ -668,34 +670,12 @@ void rtl_lps_change_work_callback(struct work_struct *work) | |||
668 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 670 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
669 | 671 | ||
670 | if (rtlpriv->enter_ps) | 672 | if (rtlpriv->enter_ps) |
671 | rtl_lps_enter_core(hw); | 673 | rtl_lps_enter(hw); |
672 | else | 674 | else |
673 | rtl_lps_leave_core(hw); | 675 | rtl_lps_leave(hw); |
674 | } | 676 | } |
675 | EXPORT_SYMBOL_GPL(rtl_lps_change_work_callback); | 677 | EXPORT_SYMBOL_GPL(rtl_lps_change_work_callback); |
676 | 678 | ||
677 | void rtl_lps_enter(struct ieee80211_hw *hw) | ||
678 | { | ||
679 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
680 | |||
681 | if (!in_interrupt()) | ||
682 | return rtl_lps_enter_core(hw); | ||
683 | rtlpriv->enter_ps = true; | ||
684 | schedule_work(&rtlpriv->works.lps_change_work); | ||
685 | } | ||
686 | EXPORT_SYMBOL_GPL(rtl_lps_enter); | ||
687 | |||
688 | void rtl_lps_leave(struct ieee80211_hw *hw) | ||
689 | { | ||
690 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
691 | |||
692 | if (!in_interrupt()) | ||
693 | return rtl_lps_leave_core(hw); | ||
694 | rtlpriv->enter_ps = false; | ||
695 | schedule_work(&rtlpriv->works.lps_change_work); | ||
696 | } | ||
697 | EXPORT_SYMBOL_GPL(rtl_lps_leave); | ||
698 | |||
699 | void rtl_swlps_wq_callback(void *data) | 679 | void rtl_swlps_wq_callback(void *data) |
700 | { | 680 | { |
701 | struct rtl_works *rtlworks = container_of_dwork_rtl(data, | 681 | struct rtl_works *rtlworks = container_of_dwork_rtl(data, |