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:
Edayilliam Jayadev
2023-08-21 21:04:32 +05:30
committed by Rahul Choudhary
parent 4aa45fd033
commit 105a5fc213
3 changed files with 46 additions and 12 deletions

View File

@@ -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,
};
/**

View File

@@ -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;
}

View File

@@ -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;