Browse Source

qcacld-3.0: save hang data to extract from the dumps

In order to improve the hang data it will be now processed internally
on every dump, hence store the data in the global variable to get
parsed by tools internally.

Change-Id: I0cfacd0643e5e486630a8ba0989c0d7d0c9a63c8
CRs-Fixed: 2810338
Arun Kumar Khandavalli 4 years ago
parent
commit
66734a0b36
1 changed files with 5 additions and 6 deletions
  1. 5 6
      core/hdd/src/wlan_hdd_driver_ops.c

+ 5 - 6
core/hdd/src/wlan_hdd_driver_ops.c

@@ -60,6 +60,9 @@ static uint8_t re_init_fail_cnt, probe_fail_cnt;
 /* An atomic flag to check if SSR cleanup has been done or not */
 static qdf_atomic_t is_recovery_cleanup_done;
 
+/* firmware/host hang event data */
+static uint8_t g_fw_host_hang_event[QDF_HANG_EVENT_DATA_SIZE];
+
 /*
  * In BMI Phase we are only sending small chunk (256 bytes) of the FW image at
  * a time, and wait for the completion interrupt to start the next transfer.
@@ -1976,10 +1979,8 @@ wlan_hdd_pld_uevent(struct device *dev, struct pld_uevent_data *event_data)
 	case PLD_FW_HANG_EVENT:
 		hdd_info("Received firmware hang event");
 		cds_get_recovery_reason(&reason);
-		hang_evt_data.hang_data =
-				qdf_mem_malloc(QDF_HANG_EVENT_DATA_SIZE);
-		if (!hang_evt_data.hang_data)
-			return;
+		qdf_mem_zero(&g_fw_host_hang_event, QDF_HANG_EVENT_DATA_SIZE);
+		hang_evt_data.hang_data = g_fw_host_hang_event;
 		hang_evt_data.offset = 0;
 		qdf_hang_event_notifier_call(reason, &hang_evt_data);
 		hang_evt_data.offset = QDF_WLAN_HANG_FW_OFFSET;
@@ -1996,8 +1997,6 @@ wlan_hdd_pld_uevent(struct device *dev, struct pld_uevent_data *event_data)
 
 		hdd_send_hang_data(hang_evt_data.hang_data,
 				   QDF_HANG_EVENT_DATA_SIZE);
-		qdf_mem_free(hang_evt_data.hang_data);
-
 		break;
 	default:
 		/* other events intentionally not handled */