rtlwifi: Use mutex to replace spin_lock to protect IPS and LPS
Enter/leavel IPS and LPS are large critical section, and they can't use
sleep function because running in atomic-context, which own a spin_lock.
In commit ba9f93f82a
("rtlwifi: Fix enter/exit power_save"), it moves
LPS functions to thread-context, so this commit can simply change LPS's
spin lock to mutex.
Considering IPS functions, rtl_ips_nic_on() may be called by TX tasklet
(softirq-context) that check whether packet is auth frame. Fortunately,
current mac80211 will ask driver to leave IPS using op_config with
changed flag IEEE80211_CONF_CHANGE_IDLE, before issuing auth frame, so
IPS functions can run in thread-context and use mutex to protect critical
section, too.
Also, this commit removes some useless spin locks.
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
@@ -2325,17 +2325,14 @@ struct rtl_hal_cfg {
|
||||
struct rtl_locks {
|
||||
/* mutex */
|
||||
struct mutex conf_mutex;
|
||||
struct mutex ps_mutex;
|
||||
struct mutex ips_mutex; /* mutex for enter/leave IPS */
|
||||
struct mutex lps_mutex; /* mutex for enter/leave LPS */
|
||||
|
||||
/*spin lock */
|
||||
spinlock_t ips_lock;
|
||||
spinlock_t irq_th_lock;
|
||||
spinlock_t irq_pci_lock;
|
||||
spinlock_t tx_lock;
|
||||
spinlock_t h2c_lock;
|
||||
spinlock_t rf_ps_lock;
|
||||
spinlock_t rf_lock;
|
||||
spinlock_t lps_lock;
|
||||
spinlock_t waitq_lock;
|
||||
spinlock_t entry_list_lock;
|
||||
spinlock_t usb_lock;
|
||||
@@ -2348,9 +2345,6 @@ struct rtl_locks {
|
||||
/*Dual mac*/
|
||||
spinlock_t cck_and_rw_pagea_lock;
|
||||
|
||||
/*Easy concurrent*/
|
||||
spinlock_t check_sendpkt_lock;
|
||||
|
||||
spinlock_t iqk_lock;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user