summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Dhamdhere <ddhamdhe@codeaurora.org>2017-02-07 00:12:57 -0800
committerqcabuildsw <qcabuildsw@localhost>2017-02-08 04:13:23 -0800
commitbf07722cf68248efe88efec388d10ddb5e70388d (patch)
tree1446780f9962d3aefae5fee78ae9b376677a1db4
parentb6feccc39c46c8e497be6d05196a56893ae1f1db (diff)
qcacld-3.0: Fix for QoS prioritization after roaming
Voice traffic is properly prioritized when a TSPEC is added to the connection. When STA roams to a new AP, TSPEC is negotiated with that AP, firmware is programmed to handle WMM access classes but HDD is not notified of this change. This problem shows up only in non-FT roaming. Ensure that AC flows are reinitialized after roaming. CRs-Fixed: 2003210 Change-Id: I7b9e07cffa90eb966c4a23ff4c4db420fb0122fe
-rw-r--r--core/sme/src/qos/sme_qos.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/core/sme/src/qos/sme_qos.c b/core/sme/src/qos/sme_qos.c
index 76e1683501de..3ee47d21cc6f 100644
--- a/core/sme/src/qos/sme_qos.c
+++ b/core/sme/src/qos/sme_qos.c
@@ -4421,6 +4421,9 @@ QDF_STATUS sme_qos_process_reassoc_req_ev(tpAniSirGlobal pMac, uint8_t sessionId
sme_QosSessionInfo *pSession;
sme_QosACInfo *pACInfo;
sme_QosEdcaAcType ac;
+ sme_QosFlowInfoEntry *flow_info = NULL;
+ tListElem *entry = NULL;
+
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO_HIGH,
"%s: %d: invoked on session %d",
__func__, __LINE__, sessionId);
@@ -4453,6 +4456,34 @@ QDF_STATUS sme_qos_process_reassoc_req_ev(tpAniSirGlobal pMac, uint8_t sessionId
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
+
+ /*
+ * Now change reason and HO renewal of
+ * all the flow in this session only
+ */
+ entry = csr_ll_peek_head(&sme_qos_cb.flow_list, false);
+ if (!entry) {
+ QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_WARN,
+ FL("Flow List empty, nothing to update"));
+ return QDF_STATUS_E_FAILURE;
+ }
+
+ do {
+ flow_info = GET_BASE_ADDR(entry, sme_QosFlowInfoEntry,
+ link);
+ if (sessionId == flow_info->sessionId) {
+ QDF_TRACE(QDF_MODULE_ID_SME,
+ QDF_TRACE_LEVEL_INFO_HIGH,
+ FL("Changing FlowID %d reason to"
+ " SETUP and HO renewal to true"),
+ flow_info->QosFlowID);
+ flow_info->reason = SME_QOS_REASON_SETUP;
+ flow_info->hoRenewal = true;
+ }
+ entry = csr_ll_next(&sme_qos_cb.flow_list, entry,
+ false);
+ } while (entry);
+
/* buffer the existing flows to be renewed after handoff is done */
sme_qos_buffer_existing_flows(pMac, sessionId);
/* clean up the control block partially for handoff */