Forráskód Böngészése

qcacld-3.0: Set PF_WAKE_UP_IDLE flag in the IPA Rx exception callback

Prevent CPU bottleneck caused by scheduling the user process running
on the same CPU with IPA worker thread.
Set PF_WAKE_UP_IDLE flag in the IPA Rx exception callback, to wake
user task to idle CPU.

Change-Id: Ifd5b917c46fff39febd7e98f4761c9e80000ea35
CRs-Fixed: 2131917
Yun Park 7 éve
szülő
commit
b28dc14126
1 módosított fájl, 15 hozzáadás és 0 törlés
  1. 15 0
      core/hdd/src/wlan_hdd_ipa.c

+ 15 - 0
core/hdd/src/wlan_hdd_ipa.c

@@ -4125,6 +4125,7 @@ static void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb,
 	int result;
 	int result;
 	struct hdd_ipa_priv *hdd_ipa = ghdd_ipa;
 	struct hdd_ipa_priv *hdd_ipa = ghdd_ipa;
 	unsigned int cpu_index;
 	unsigned int cpu_index;
+	uint32_t enabled;
 
 
 	if (!adapter || adapter->magic != WLAN_HDD_ADAPTER_MAGIC) {
 	if (!adapter || adapter->magic != WLAN_HDD_ADAPTER_MAGIC) {
 		HDD_IPA_LOG(QDF_TRACE_LEVEL_DEBUG, "Invalid adapter: 0x%pK",
 		HDD_IPA_LOG(QDF_TRACE_LEVEL_DEBUG, "Invalid adapter: 0x%pK",
@@ -4140,6 +4141,14 @@ static void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb,
 		return;
 		return;
 	}
 	}
 
 
+	/*
+	 * Set PF_WAKE_UP_IDLE flag in the task structure
+	 * This task and any task woken by this will be waken to idle CPU
+	 */
+	enabled = sched_get_wake_up_idle(current);
+	if (!enabled)
+		sched_set_wake_up_idle(current, true);
+
 	skb->destructor = hdd_ipa_uc_rt_debug_destructor;
 	skb->destructor = hdd_ipa_uc_rt_debug_destructor;
 	skb->dev = adapter->dev;
 	skb->dev = adapter->dev;
 	skb->protocol = eth_type_trans(skb, skb->dev);
 	skb->protocol = eth_type_trans(skb, skb->dev);
@@ -4155,6 +4164,12 @@ static void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb,
 		++adapter->hdd_stats.tx_rx_stats.rx_refused[cpu_index];
 		++adapter->hdd_stats.tx_rx_stats.rx_refused[cpu_index];
 
 
 	hdd_ipa->ipa_rx_net_send_count++;
 	hdd_ipa->ipa_rx_net_send_count++;
+
+	/*
+	 * Restore PF_WAKE_UP_IDLE flag in the task structure
+	 */
+	if (!enabled)
+		sched_set_wake_up_idle(current, false);
 }
 }
 
 
 /**
 /**