Explorar el Código

qcacmn: Use UNBOUND flag to create WMI RX workqueue

WMI RX workqueue is created with WQ_MEM_RECLAIM flag. When host receives
the WMI service ready event it queues the work. There is 50sec delay in
scheduling workqueue to process WMI service ready event. This results in
host timeout (timeout = 15sec) and wifi load failure. This cleans up the
host data structures related to data path. But work got scheduled after
50sec resulting in init path handling with inconsistent data structures.

Use workqueue UNBOUND flag to create WMI RX workqueue. Works queued to
unbound workqueues are implicitly HIGHPRI and dispatched to unbound
workers as soon as resources are available.

Change-Id: I46eb0242ad88103268df99be9fd2e0759ebec4b2
CRs-Fixed: 2343181
Shashikala Prabhu hace 6 años
padre
commit
d73876fbb4
Se han modificado 1 ficheros con 2 adiciones y 2 borrados
  1. 2 2
      wmi_unified.c

+ 2 - 2
wmi_unified.c

@@ -2440,7 +2440,7 @@ void *wmi_unified_get_pdev_handle(struct wmi_soc *soc, uint32_t pdev_idx)
 		qdf_create_work(0, &wmi_handle->rx_event_work,
 				wmi_rx_event_work, wmi_handle);
 		wmi_handle->wmi_rx_work_queue =
-			qdf_create_workqueue("wmi_rx_event_work_queue");
+			qdf_alloc_unbound_workqueue("wmi_rx_event_work_queue");
 		if (NULL == wmi_handle->wmi_rx_work_queue) {
 			WMI_LOGE("failed to create wmi_rx_event_work_queue");
 			goto error;
@@ -2570,7 +2570,7 @@ void *wmi_unified_attach(void *scn_handle,
 	qdf_create_work(0, &wmi_handle->rx_event_work,
 			wmi_rx_event_work, wmi_handle);
 	wmi_handle->wmi_rx_work_queue =
-		qdf_create_workqueue("wmi_rx_event_work_queue");
+		qdf_alloc_unbound_workqueue("wmi_rx_event_work_queue");
 	if (NULL == wmi_handle->wmi_rx_work_queue) {
 		WMI_LOGE("failed to create wmi_rx_event_work_queue");
 		goto error;