qcacmn: Cleanup assert in mgmt rx reo - Part 6
Cleanup asserts in management Rx reorder module. Change-Id: Ief86560bab36a59c7e82707a4c0b58ff4ce954a8 CRs-Fixed: 3593933
This commit is contained in:

committed by
Rahul Choudhary

parent
4aa45fd033
commit
105a5fc213
@@ -1601,6 +1601,12 @@ enum qdf_suspend_type {
|
||||
* suspended
|
||||
* @QDF_VDEV_MAC_ADDR_UPDATE_RESPONSE_TIMED_OUT: VDEV MAC address update
|
||||
* request for Link switch timedout.
|
||||
* @QDF_MGMT_RX_REO_INCONSISTENT_SNAPSHOT: Inconsistent management Rx reorder
|
||||
* snapshots
|
||||
* @QDF_MGMT_RX_REO_OUT_OF_ORDER_PKT: Reception of management packet with out
|
||||
* of order packet counter values
|
||||
* @QDF_MGMT_RX_REO_ZERO_DURATION_PKT: Reception of management packet with zero
|
||||
* packet duration
|
||||
*/
|
||||
enum qdf_hang_reason {
|
||||
QDF_REASON_UNSPECIFIED,
|
||||
@@ -1639,6 +1645,9 @@ enum qdf_hang_reason {
|
||||
QDF_FLUSH_LOGS,
|
||||
QDF_WMI_CMD_SENT_DURING_SUSPEND,
|
||||
QDF_VDEV_MAC_ADDR_UPDATE_RESPONSE_TIMED_OUT,
|
||||
QDF_MGMT_RX_REO_INCONSISTENT_SNAPSHOT,
|
||||
QDF_MGMT_RX_REO_OUT_OF_ORDER_PKT,
|
||||
QDF_MGMT_RX_REO_ZERO_DURATION_PKT,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include <wlan_lmac_if_api.h>
|
||||
#include <init_deinit_lmac.h>
|
||||
#include <wlan_mlo_mgr_setup.h>
|
||||
#include <qdf_platform.h>
|
||||
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_fw_consumed_event_handler() - WMI event handler to
|
||||
@@ -280,6 +281,7 @@ target_if_mgmt_rx_reo_get_valid_hw_link_bitmap(struct wlan_objmgr_psoc *psoc,
|
||||
/**
|
||||
* target_if_mgmt_rx_reo_read_snapshot_raw() - Read raw value of management
|
||||
* rx-reorder snapshot
|
||||
* @pdev: pointer to pdev object
|
||||
* @snapshot_address: snapshot address
|
||||
* @mgmt_rx_reo_snapshot_low: Pointer to lower 32 bits of snapshot value
|
||||
* @mgmt_rx_reo_snapshot_high: Pointer to higher 32 bits of snapshot value
|
||||
@@ -292,7 +294,8 @@ target_if_mgmt_rx_reo_get_valid_hw_link_bitmap(struct wlan_objmgr_psoc *psoc,
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_mgmt_rx_reo_read_snapshot_raw
|
||||
(struct mgmt_rx_reo_shared_snapshot *snapshot_address,
|
||||
(struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_rx_reo_shared_snapshot *snapshot_address,
|
||||
uint32_t *mgmt_rx_reo_snapshot_low,
|
||||
uint32_t *mgmt_rx_reo_snapshot_high,
|
||||
uint8_t snapshot_version,
|
||||
@@ -343,8 +346,14 @@ target_if_mgmt_rx_reo_read_snapshot_raw
|
||||
prev_snapshot_high = cur_snapshot_high;
|
||||
}
|
||||
|
||||
qdf_assert_always(retry_count !=
|
||||
(MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT - 1));
|
||||
if (retry_count ==
|
||||
(MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT - 1)) {
|
||||
enum qdf_hang_reason reason;
|
||||
|
||||
reason = QDF_MGMT_RX_REO_INCONSISTENT_SNAPSHOT;
|
||||
mgmt_rx_reo_err("Triggering self recovery, inconsistent SS");
|
||||
qdf_trigger_self_recovery(wlan_pdev_get_psoc(pdev), reason);
|
||||
}
|
||||
|
||||
*mgmt_rx_reo_snapshot_low = cur_snapshot_low;
|
||||
*mgmt_rx_reo_snapshot_high = cur_snapshot_high;
|
||||
@@ -426,7 +435,7 @@ target_if_mgmt_rx_reo_read_snapshot(
|
||||
for (; retry_count < MGMT_RX_REO_SNAPSHOT_READ_RETRY_LIMIT;
|
||||
retry_count++) {
|
||||
status = target_if_mgmt_rx_reo_read_snapshot_raw
|
||||
(snapshot_address,
|
||||
(pdev, snapshot_address,
|
||||
&mgmt_rx_reo_snapshot_low,
|
||||
&mgmt_rx_reo_snapshot_high,
|
||||
snapshot_version,
|
||||
@@ -481,13 +490,18 @@ target_if_mgmt_rx_reo_read_snapshot(
|
||||
}
|
||||
|
||||
if (retry_count == MGMT_RX_REO_SNAPSHOT_READ_RETRY_LIMIT) {
|
||||
enum qdf_hang_reason reason;
|
||||
|
||||
mgmt_rx_reo_err("Read retry limit, id = %d, ver = %u",
|
||||
id, snapshot_version);
|
||||
snapshot_value->valid = false;
|
||||
snapshot_value->mgmt_pkt_ctr = 0xFFFF;
|
||||
snapshot_value->global_timestamp = 0xFFFFFFFF;
|
||||
snapshot_value->retry_count = retry_count;
|
||||
qdf_assert_always(0);
|
||||
reason = QDF_MGMT_RX_REO_INCONSISTENT_SNAPSHOT;
|
||||
mgmt_rx_reo_err("Triggering self recovery, retry fail");
|
||||
qdf_trigger_self_recovery(wlan_pdev_get_psoc(pdev),
|
||||
reason);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
|
@@ -26,6 +26,8 @@
|
||||
#include <qdf_util.h>
|
||||
#include <wlan_mlo_mgr_cmn.h>
|
||||
#include <wlan_mlo_mgr_setup.h>
|
||||
#include <qdf_platform.h>
|
||||
#include <qdf_types.h>
|
||||
|
||||
static struct mgmt_rx_reo_context *g_rx_reo_ctx[WLAN_MAX_MLO_GROUPS];
|
||||
|
||||
@@ -199,6 +201,7 @@ handle_out_of_order_pkt_ctr(struct mgmt_rx_reo_frame_descriptor *desc,
|
||||
|
||||
/**
|
||||
* check_and_handle_zero_frame_duration() - Check and handle zero duration error
|
||||
* @pdev: Pointer to pdev object
|
||||
* @desc: Pointer to frame descriptor
|
||||
*
|
||||
* API to check for zero duration management frames. Host will be able to
|
||||
@@ -208,7 +211,8 @@ handle_out_of_order_pkt_ctr(struct mgmt_rx_reo_frame_descriptor *desc,
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
check_and_handle_zero_frame_duration(struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
check_and_handle_zero_frame_duration(struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
{
|
||||
struct mgmt_rx_reo_params *reo_params;
|
||||
|
||||
@@ -341,6 +345,7 @@ handle_out_of_order_pkt_ctr(struct mgmt_rx_reo_frame_descriptor *desc,
|
||||
|
||||
/**
|
||||
* check_and_handle_zero_frame_duration() - Check and handle zero duration error
|
||||
* @pdev: Pointer to pdev object
|
||||
* @desc: Pointer to frame descriptor
|
||||
*
|
||||
* API to check for zero duration management frames and assert.
|
||||
@@ -348,7 +353,8 @@ handle_out_of_order_pkt_ctr(struct mgmt_rx_reo_frame_descriptor *desc,
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
check_and_handle_zero_frame_duration(struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
check_and_handle_zero_frame_duration(struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
{
|
||||
struct mgmt_rx_reo_params *reo_params;
|
||||
|
||||
@@ -374,7 +380,9 @@ check_and_handle_zero_frame_duration(struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
reo_params->link_id, reo_params->valid,
|
||||
reo_params->mgmt_pkt_ctr,
|
||||
reo_params->global_timestamp);
|
||||
qdf_assert_always(0);
|
||||
mgmt_rx_reo_err("Triggering self recovery, zero duration pkt");
|
||||
qdf_trigger_self_recovery(wlan_pdev_get_psoc(pdev),
|
||||
QDF_MGMT_RX_REO_ZERO_DURATION_PKT);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
@@ -4307,6 +4315,7 @@ mgmt_rx_reo_egress_list_init(struct mgmt_rx_reo_egress_list *egress_list)
|
||||
|
||||
/**
|
||||
* check_frame_sanity() - Check the sanity of a given management frame
|
||||
* @pdev: Pointer to pdev object
|
||||
* @desc: Pointer to frame descriptor
|
||||
*
|
||||
* API to check the sanity of a given management frame. This API checks for the
|
||||
@@ -4318,7 +4327,8 @@ mgmt_rx_reo_egress_list_init(struct mgmt_rx_reo_egress_list *egress_list)
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
check_frame_sanity(struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
check_frame_sanity(struct wlan_objmgr_pdev *pdev,
|
||||
struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
@@ -4333,7 +4343,7 @@ check_frame_sanity(struct mgmt_rx_reo_frame_descriptor *desc)
|
||||
return status;
|
||||
}
|
||||
|
||||
status = check_and_handle_zero_frame_duration(desc);
|
||||
status = check_and_handle_zero_frame_duration(pdev, desc);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mgmt_rx_reo_warn_rl("Drop frame with zero duration");
|
||||
return status;
|
||||
@@ -4455,7 +4465,8 @@ failure_debug:
|
||||
mgmt_rx_reo_err("Last Pkt valid = %u, pkt_ctr = %u, ts = %u",
|
||||
host_ss->valid, host_ss->mgmt_pkt_ctr,
|
||||
host_ss->global_timestamp);
|
||||
qdf_assert_always(0);
|
||||
mgmt_rx_reo_err("Triggering self recovery, out of order pkt");
|
||||
qdf_trigger_self_recovery(psoc, QDF_MGMT_RX_REO_OUT_OF_ORDER_PKT);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
@@ -5353,7 +5364,7 @@ wlan_mgmt_rx_reo_algo_entry(struct wlan_objmgr_pdev *pdev,
|
||||
if (QDF_IS_STATUS_ERROR(ret))
|
||||
goto failure;
|
||||
|
||||
ret = check_frame_sanity(desc);
|
||||
ret = check_frame_sanity(pdev, desc);
|
||||
if (QDF_IS_STATUS_ERROR(ret))
|
||||
goto failure;
|
||||
|
||||
|
Reference in New Issue
Block a user