Преглед изворни кода

qcacmn: Refine API wlan_log_to_user

Remove redundant message length check.
Truncate message immediately if its length is over MAX_LOGMSG_LENGTH,
so that can remove min check between true length and max available length.

Change-Id: I7e6c61021316a727e04dbb9671947b6413c27af3
CRs-fixed: 2229210
Kai Liu пре 7 година
родитељ
комит
d7bfcdf520
1 измењених фајлова са 19 додато и 22 уклоњено
  1. 19 22
      utils/logging/src/wlan_logging_sock_svc.c

+ 19 - 22
utils/logging/src/wlan_logging_sock_svc.c

@@ -326,7 +326,6 @@ int wlan_log_to_user(QDF_TRACE_LEVEL log_level, char *to_be_sent, int length)
 	unsigned long flags;
 	uint64_t ts;
 	int radio = 0;
-	bool log_overflow = false;
 
 #ifdef CONFIG_MCL
 	radio = cds_get_radio_index();
@@ -360,10 +359,9 @@ int wlan_log_to_user(QDF_TRACE_LEVEL log_level, char *to_be_sent, int length)
 
 	pfilled_length = &gwlan_logging.pcur_node->filled_length;
 
-	/* Check if we can accomodate more log into current node/buffer */
-	if ((MAX_LOGMSG_LENGTH <= (*pfilled_length + sizeof(tAniNlHdr))) ||
-		((MAX_LOGMSG_LENGTH - (*pfilled_length +
-			sizeof(tAniNlHdr))) < total_log_len)) {
+	/* Check if we can accommodate more log into current node/buffer */
+	if ((MAX_LOGMSG_LENGTH - (*pfilled_length +
+			sizeof(tAniNlHdr))) < total_log_len) {
 		wake_up_thread = true;
 		wlan_queue_logmsg_for_app();
 		pfilled_length = &gwlan_logging.pcur_node->filled_length;
@@ -371,30 +369,29 @@ int wlan_log_to_user(QDF_TRACE_LEVEL log_level, char *to_be_sent, int length)
 
 	ptr = &gwlan_logging.pcur_node->logbuf[sizeof(tAniHdr)];
 
-	/* Assumption here is that we receive logs which is always less than
-	 * MAX_LOGMSG_LENGTH, where we can accomodate the
-	 *   tAniNlHdr + [context][timestamp] + log
-	 *
-	 * Continue and copy logs to the available length and discard the rest.
-	 */
-	if (MAX_LOGMSG_LENGTH < (sizeof(tAniNlHdr) + total_log_len)) {
-		log_overflow = true;
-		total_log_len = MAX_LOGMSG_LENGTH - sizeof(tAniNlHdr) - 2;
+	if (unlikely(MAX_LOGMSG_LENGTH < (sizeof(tAniNlHdr) + total_log_len))) {
+		/*
+		 * Assumption here is that we receive logs which is less than
+		 * MAX_LOGMSG_LENGTH, where we can accommodate the
+		 * tAniNlHdr + [context][timestamp] + log
+		 * If log length is over MAX_LOGMSG_LENGTH,
+		 * the overflow part will be discarded.
+		 */
+		length = MAX_LOGMSG_LENGTH - sizeof(tAniNlHdr) - tlen - 2;
+		/*
+		 * QDF_ASSERT if complete log was not accommodated into
+		 * the available buffer.
+		 */
+		QDF_ASSERT(0);
 	}
 
 	memcpy(&ptr[*pfilled_length], tbuf, tlen);
-	memcpy(&ptr[*pfilled_length + tlen], to_be_sent,
-	       min(length, (total_log_len - tlen)));
-	*pfilled_length += tlen + min(length, total_log_len - tlen);
+	memcpy(&ptr[*pfilled_length + tlen], to_be_sent, length);
+	*pfilled_length += tlen + length;
 	ptr[*pfilled_length] = '\n';
 	*pfilled_length += 1;
 
 	spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
-	/*
-	 * QDF_ASSERT if complete log was not accomodated into
-	 * the available buffer.
-	 */
-	QDF_ASSERT(!log_overflow);
 
 	/* Wakeup logger thread */
 	if ((true == wake_up_thread)) {