diff options
| author | Deepak Dhamdhere <ddhamdhe@codeaurora.org> | 2017-02-07 00:12:57 -0800 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-02-08 04:13:23 -0800 |
| commit | bf07722cf68248efe88efec388d10ddb5e70388d (patch) | |
| tree | 1446780f9962d3aefae5fee78ae9b376677a1db4 | |
| parent | b6feccc39c46c8e497be6d05196a56893ae1f1db (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.c | 31 |
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 */ |
