Browse Source

qcacmn: Clean up asserts in Spectral module - Part 6

Modify functions to return QDF_STATUS to handle assert conditions and
return appropriate status to the caller
1. target_if_spectral_phyerr.c

Change-Id: I8f9d320b774ef172bc3dd3609581b13694e1edfd
CRs-Fixed: 3591197
Nagasai Bharat Gatkeshwar Sainoji 1 năm trước cách đây
mục cha
commit
843a02da37
1 tập tin đã thay đổi với 85 bổ sung28 xóa
  1. 85 28
      target_if/spectral/target_if_spectral_phyerr.c

+ 85 - 28
target_if/spectral/target_if_spectral_phyerr.c

@@ -85,7 +85,11 @@ static inline void target_if_spectral_hexdump(unsigned char *_buf, int _len)
 
 		if (!mod) {
 			if (i) {
-				qdf_assert_always(loc < sizeof(hexdump_line));
+				if (loc >= sizeof(hexdump_line)) {
+					spectral_err("loc index is %u, greater than hexdump_line array size",
+						     loc);
+					return;
+				}
 				loc += snprintf(&hexdump_line[loc],
 						sizeof(hexdump_line) - loc,
 						"  %s", ascii);
@@ -96,7 +100,11 @@ static inline void target_if_spectral_hexdump(unsigned char *_buf, int _len)
 			}
 		}
 
-		qdf_assert_always(loc < sizeof(hexdump_line));
+		if (loc >= sizeof(hexdump_line)) {
+			spectral_err("loc index is %u, greater than hexdump_line array size",
+				     loc);
+			return;
+		}
 		loc += snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc,
 				" %02x", pc[i]);
 
@@ -108,13 +116,21 @@ static inline void target_if_spectral_hexdump(unsigned char *_buf, int _len)
 	}
 
 	while ((i % SPECTRAL_HEXDUMP_NUM_OCTETS_PER_LINE) != 0) {
-		qdf_assert_always(loc < sizeof(hexdump_line));
+		if (loc >= sizeof(hexdump_line)) {
+			spectral_err("loc index is %u, greater than hexdump_line array size",
+				     loc);
+			return;
+		}
 		loc += snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc,
 				"   ");
 		i++;
 	}
 
-	qdf_assert_always(loc < sizeof(hexdump_line));
+	if (loc >= sizeof(hexdump_line)) {
+		spectral_err("loc index is %u, greater than hexdump_line array size",
+			     loc);
+		return;
+	}
 	snprintf(&hexdump_line[loc], sizeof(hexdump_line) - loc, "  %s", ascii);
 	spectral_debug("%s", hexdump_line);
 }
@@ -2657,25 +2673,30 @@ target_if_160mhz_delivery_state_change(struct target_if_spectral *spectral,
  * target_if_get_detector_id_sscan_summary_report_gen3() - Get Spectral detector
  * ID from Spectral summary report
  * @data: Pointer to Spectral summary report
+ * @detector_id: Pointer to detector id
  *
- * Return: Detector ID
+ * Return: QDF_STATUS
  */
-static uint8_t
-target_if_get_detector_id_sscan_summary_report_gen3(uint8_t *data) {
+static QDF_STATUS
+target_if_get_detector_id_sscan_summary_report_gen3(uint8_t *data,
+						    uint8_t *detector_id)
+{
 	struct spectral_sscan_summary_report_gen3 *psscan_summary_report;
-	uint8_t detector_id;
 
-	qdf_assert_always(data);
+	if (!data) {
+		spectral_err("Argument(data) is null.");
+		return QDF_STATUS_E_NULL_VALUE;
+	}
 
 	psscan_summary_report =
 		(struct spectral_sscan_summary_report_gen3 *)data;
 
-	detector_id = get_bitfield(
+	*detector_id = get_bitfield(
 			psscan_summary_report->hdr_a,
 			SSCAN_SUMMARY_REPORT_HDR_A_DETECTOR_ID_SIZE_GEN3,
 			SSCAN_SUMMARY_REPORT_HDR_A_DETECTOR_ID_POS_GEN3);
 
-	return detector_id;
+	return QDF_STATUS_SUCCESS;
 }
 
 #ifndef OPTIMIZED_SAMP_MESSAGE
@@ -2697,9 +2718,11 @@ target_if_consume_sscan_summary_report_gen3(
 				struct spectral_report_params *rparams) {
 	struct spectral_sscan_summary_report_gen3 *psscan_summary_report;
 
-	qdf_assert_always(data);
-	qdf_assert_always(fields);
-	qdf_assert_always(rparams);
+	if (!data || !fields || !rparams) {
+		spectral_err("null arguments: data %pK, fields %pK, rparams %pK.",
+			     data, fields, rparams);
+		return;
+	}
 
 	psscan_summary_report =
 		(struct spectral_sscan_summary_report_gen3 *)data;
@@ -2731,7 +2754,9 @@ target_if_consume_sscan_summary_report_gen3(
 			SSCAN_SUMMARY_REPORT_HDR_C_GAINCHANGE_POS_GEN3_V2);
 		break;
 	default:
-		qdf_assert_always(0);
+		spectral_err("Invalid spectral report format version: %d.",
+			     rparams->version);
+		return;
 	}
 }
 #endif
@@ -2937,17 +2962,23 @@ static void target_if_spectral_verify_ts(struct target_if_spectral *spectral,
  * @raw_timestamp: Spectral time stamp reported by target
  * @reset_delay: Reset delay at target
  * @smode: Spectral scan mode
+ * @tstamp: Pointer to adjusted timestamp
  *
  * Correct time stamp to account for reset in time stamp due to target reset
  *
- * Return: Adjusted time stamp
+ * Return: QDF_STATUS
  */
-static uint32_t
+static QDF_STATUS
 target_if_spectral_get_adjusted_timestamp(struct spectral_timestamp_war *twar,
 					  uint32_t raw_timestamp,
 					  uint32_t reset_delay,
-					  enum spectral_scan_mode smode) {
-	qdf_assert_always(smode < SPECTRAL_SCAN_MODE_MAX);
+					  enum spectral_scan_mode smode,
+					  uint32_t *tstamp)
+{
+	if (smode >= SPECTRAL_SCAN_MODE_MAX) {
+		spectral_err("Invalid spectral scan mode: %d", smode);
+		return QDF_STATUS_E_INVAL;
+	}
 
 	if (reset_delay) {
 		enum spectral_scan_mode m =
@@ -2965,7 +2996,9 @@ target_if_spectral_get_adjusted_timestamp(struct spectral_timestamp_war *twar,
 	}
 	twar->last_fft_timestamp[smode] = raw_timestamp;
 
-	return raw_timestamp + twar->timestamp_war_offset[smode];
+	*tstamp = raw_timestamp + twar->timestamp_war_offset[smode];
+
+	return QDF_STATUS_SUCCESS;
 }
 
 #ifdef BIG_ENDIAN_HOST
@@ -3043,7 +3076,7 @@ QDF_STATUS target_if_byte_swap_spectral_fft_bins_gen3(
  *
  * Consume Spectral summary report for gen3
  *
- * Return: Success/Failure
+ * Return: QDF_STATUS
  */
 static QDF_STATUS
 target_if_consume_sscan_summary_report_gen3(
@@ -3054,6 +3087,8 @@ target_if_consume_sscan_summary_report_gen3(
 	struct spectral_sscan_summary_report_gen3 *psscan_summary_report;
 	struct spectral_sscan_summary_report_padding_gen3_v2 *padding;
 	bool scan_radio_blanking;
+	QDF_STATUS ret;
+	uint8_t dtr_id;
 
 	if (!data) {
 		spectral_err_rl("Summary report buffer is null");
@@ -3078,8 +3113,12 @@ target_if_consume_sscan_summary_report_gen3(
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	fields->sscan_detector_id =
-		target_if_get_detector_id_sscan_summary_report_gen3(*data);
+	ret = target_if_get_detector_id_sscan_summary_report_gen3(*data,
+								  &dtr_id);
+	if (QDF_IS_STATUS_ERROR(ret))
+		return QDF_STATUS_E_FAILURE;
+
+	fields->sscan_detector_id = dtr_id;
 	if (fields->sscan_detector_id >=
 	    spectral->rparams.num_spectral_detectors) {
 		spectral->diag_stats.spectral_invalid_detector_id++;
@@ -3184,6 +3223,7 @@ target_if_process_sfft_report_gen3(
 	int32_t peak_sidx = 0;
 	int32_t peak_mag;
 	int fft_hdr_length = 0;
+	uint32_t tstamp;
 	struct target_if_spectral_ops *p_sops;
 	enum spectral_scan_mode spectral_mode;
 	QDF_STATUS ret;
@@ -3265,11 +3305,17 @@ target_if_process_sfft_report_gen3(
 	p_sfft->timestamp = p_fft_report->fft_timestamp;
 	p_sfft->last_raw_timestamp = spectral->timestamp_war.
 					last_fft_timestamp[spectral_mode];
-	p_sfft->adjusted_timestamp = target_if_spectral_get_adjusted_timestamp(
+	ret = target_if_spectral_get_adjusted_timestamp(
 						&spectral->timestamp_war,
 						p_sfft->timestamp,
 						reset_delay,
-						spectral_mode);
+						spectral_mode,
+						&tstamp);
+
+	if (QDF_IS_STATUS_ERROR(ret))
+		return QDF_STATUS_E_FAILURE;
+
+	p_sfft->adjusted_timestamp =  tstamp;
 	/* Timestamp verification */
 	target_if_spectral_verify_ts(spectral, data,
 				     p_sfft->adjusted_timestamp,
@@ -3709,10 +3755,12 @@ target_if_consume_spectral_report_gen3(
 	uint8_t vdev_rxchainmask;
 	struct sscan_report_fields_gen3 sscan_report_fields = {0};
 	enum spectral_detector_id detector_id;
+	uint8_t dtr_id;
 	QDF_STATUS ret;
 	enum spectral_scan_mode spectral_mode = SPECTRAL_SCAN_MODE_INVALID;
 	uint8_t *temp;
 	bool finite_scan = false;
+	uint32_t tstamp;
 
 	/* Apply byte-swap on the headers */
 	if (p_sops->byte_swap_headers) {
@@ -3731,7 +3779,12 @@ target_if_consume_spectral_report_gen3(
 		goto fail;
 	}
 
-	detector_id = target_if_get_detector_id_sscan_summary_report_gen3(data);
+	ret = target_if_get_detector_id_sscan_summary_report_gen3(data,
+								  &dtr_id);
+	if (QDF_IS_STATUS_ERROR(ret))
+		goto fail;
+
+	detector_id = dtr_id;
 	if (detector_id >= spectral->rparams.num_spectral_detectors) {
 		spectral->diag_stats.spectral_invalid_detector_id++;
 		spectral_err("Invalid detector id %u, expected is 0/1/2",
@@ -3835,10 +3888,14 @@ target_if_consume_spectral_report_gen3(
 				last_fft_timestamp[spectral_mode];
 		params.reset_delay = report->reset_delay;
 		params.raw_timestamp = p_sfft->timestamp;
-		params.tstamp = target_if_spectral_get_adjusted_timestamp(
+		ret = target_if_spectral_get_adjusted_timestamp(
 					&spectral->timestamp_war,
 					p_sfft->timestamp, report->reset_delay,
-					spectral_mode);
+					spectral_mode, &tstamp);
+		if (QDF_IS_STATUS_ERROR(ret))
+			goto fail;
+
+		params.tstamp = tstamp;
 		params.timestamp_war_offset = spectral->timestamp_war.
 				timestamp_war_offset[spectral_mode];
 		params.target_reset_count = spectral->timestamp_war.