mirror of https://gitee.com/openkylin/linux.git
iwlwifi: mvm: move queue reconfiguration into new function
If TVQM is used we skip over this, move the code into a new function to get rid of the label. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
459ab04592
commit
b342228d6b
|
@ -1351,6 +1351,33 @@ static void iwl_mvm_remove_inactive_tids(struct iwl_mvm *mvm,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void iwl_mvm_reconfigure_queue(struct iwl_mvm *mvm, int queue)
|
||||||
|
{
|
||||||
|
bool reconfig;
|
||||||
|
bool change_owner;
|
||||||
|
|
||||||
|
spin_lock_bh(&mvm->queue_info_lock);
|
||||||
|
reconfig = mvm->queue_info[queue].status == IWL_MVM_QUEUE_RECONFIGURING;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to take into account a situation in which a TXQ was
|
||||||
|
* allocated to TID x, and then turned shared by adding TIDs y
|
||||||
|
* and z. If TID x becomes inactive and is removed from the TXQ,
|
||||||
|
* ownership must be given to one of the remaining TIDs.
|
||||||
|
* This is mainly because if TID x continues - a new queue can't
|
||||||
|
* be allocated for it as long as it is an owner of another TXQ.
|
||||||
|
*/
|
||||||
|
change_owner = !(mvm->queue_info[queue].tid_bitmap &
|
||||||
|
BIT(mvm->queue_info[queue].txq_tid)) &&
|
||||||
|
(mvm->queue_info[queue].status == IWL_MVM_QUEUE_SHARED);
|
||||||
|
spin_unlock_bh(&mvm->queue_info_lock);
|
||||||
|
|
||||||
|
if (reconfig)
|
||||||
|
iwl_mvm_unshare_queue(mvm, queue);
|
||||||
|
else if (change_owner)
|
||||||
|
iwl_mvm_change_queue_owner(mvm, queue);
|
||||||
|
}
|
||||||
|
|
||||||
static void iwl_mvm_inactivity_check(struct iwl_mvm *mvm)
|
static void iwl_mvm_inactivity_check(struct iwl_mvm *mvm)
|
||||||
{
|
{
|
||||||
unsigned long now = jiffies;
|
unsigned long now = jiffies;
|
||||||
|
@ -1504,7 +1531,7 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)
|
||||||
struct ieee80211_sta *sta;
|
struct ieee80211_sta *sta;
|
||||||
struct iwl_mvm_sta *mvmsta;
|
struct iwl_mvm_sta *mvmsta;
|
||||||
unsigned long deferred_tid_traffic;
|
unsigned long deferred_tid_traffic;
|
||||||
int queue, sta_id, tid;
|
int sta_id, tid;
|
||||||
|
|
||||||
/* Check inactivity of queues */
|
/* Check inactivity of queues */
|
||||||
iwl_mvm_inactivity_check(mvm);
|
iwl_mvm_inactivity_check(mvm);
|
||||||
|
@ -1512,39 +1539,14 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)
|
||||||
mutex_lock(&mvm->mutex);
|
mutex_lock(&mvm->mutex);
|
||||||
|
|
||||||
/* No queue reconfiguration in TVQM mode */
|
/* No queue reconfiguration in TVQM mode */
|
||||||
if (iwl_mvm_has_new_tx_api(mvm))
|
if (!iwl_mvm_has_new_tx_api(mvm)) {
|
||||||
goto alloc_queues;
|
int queue;
|
||||||
|
|
||||||
/* Reconfigure queues requiring reconfiguation */
|
/* Reconfigure queues requiring reconfiguation */
|
||||||
for (queue = 0; queue < ARRAY_SIZE(mvm->queue_info); queue++) {
|
for (queue = 0; queue < ARRAY_SIZE(mvm->queue_info); queue++)
|
||||||
bool reconfig;
|
iwl_mvm_reconfigure_queue(mvm, queue);
|
||||||
bool change_owner;
|
|
||||||
|
|
||||||
spin_lock_bh(&mvm->queue_info_lock);
|
|
||||||
reconfig = (mvm->queue_info[queue].status ==
|
|
||||||
IWL_MVM_QUEUE_RECONFIGURING);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We need to take into account a situation in which a TXQ was
|
|
||||||
* allocated to TID x, and then turned shared by adding TIDs y
|
|
||||||
* and z. If TID x becomes inactive and is removed from the TXQ,
|
|
||||||
* ownership must be given to one of the remaining TIDs.
|
|
||||||
* This is mainly because if TID x continues - a new queue can't
|
|
||||||
* be allocated for it as long as it is an owner of another TXQ.
|
|
||||||
*/
|
|
||||||
change_owner = !(mvm->queue_info[queue].tid_bitmap &
|
|
||||||
BIT(mvm->queue_info[queue].txq_tid)) &&
|
|
||||||
(mvm->queue_info[queue].status ==
|
|
||||||
IWL_MVM_QUEUE_SHARED);
|
|
||||||
spin_unlock_bh(&mvm->queue_info_lock);
|
|
||||||
|
|
||||||
if (reconfig)
|
|
||||||
iwl_mvm_unshare_queue(mvm, queue);
|
|
||||||
else if (change_owner)
|
|
||||||
iwl_mvm_change_queue_owner(mvm, queue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alloc_queues:
|
|
||||||
/* Go over all stations with deferred traffic */
|
/* Go over all stations with deferred traffic */
|
||||||
for_each_set_bit(sta_id, mvm->sta_deferred_frames,
|
for_each_set_bit(sta_id, mvm->sta_deferred_frames,
|
||||||
IWL_MVM_STATION_COUNT) {
|
IWL_MVM_STATION_COUNT) {
|
||||||
|
|
Loading…
Reference in New Issue