qcacld-3.0: Check kernel scheduler APIs for wake up on idle CPU

Check PF_WAKE_UP_IDLE macro defined to determine the presence of
kernel scheduler APIs for wake up on an idle CPU.
If not, call dummy functions instead.

Change-Id: I34065aa244dc132e228c6e9f764c8eae90d81261
CRs-Fixed: 2168716
Dieser Commit ist enthalten in:
Yun Park
2018-04-09 10:43:08 -07:00
committet von nshrivas
Ursprung 071a021a38
Commit 5fe20500cd

Datei anzeigen

@@ -312,6 +312,42 @@ void hdd_ipa_set_tx_flow_info(void)
}
}
#if defined(QCA_CONFIG_SMP) && defined(PF_WAKE_UP_IDLE)
/**
* hdd_ipa_get_wake_up_idle() - Get PF_WAKE_UP_IDLE flag in the task structure
*
* Get PF_WAKE_UP_IDLE flag in the task structure
*
* Return: 1 if PF_WAKE_UP_IDLE flag is set, 0 otherwise
*/
static uint32_t hdd_ipa_get_wake_up_idle(void)
{
return sched_get_wake_up_idle(current);
}
/**
* hdd_ipa_set_wake_up_idle() - Set PF_WAKE_UP_IDLE flag in the task structure
*
* Set PF_WAKE_UP_IDLE flag in the task structure
* This task and any task woken by this will be waken to idle CPU
*
* Return: None
*/
static void hdd_ipa_set_wake_up_idle(bool wake_up_idle)
{
sched_set_wake_up_idle(current, wake_up_idle);
}
#else
static uint32_t hdd_ipa_get_wake_up_idle(void)
{
return 0;
}
static void hdd_ipa_set_wake_up_idle(bool wake_up_idle)
{
}
#endif
#ifdef QCA_CONFIG_SMP
static int hdd_ipa_aggregated_rx_ind(qdf_nbuf_t skb)
{
@@ -352,6 +388,7 @@ void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb, qdf_netdev_t dev)
int result;
unsigned int cpu_index;
uint8_t staid;
uint32_t enabled;
if (hdd_validate_adapter(adapter)) {
hdd_debug_rl("Invalid adapter: 0x%pK", adapter);
@@ -374,6 +411,14 @@ void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb, qdf_netdev_t dev)
hdd_inspect_dhcp_packet(adapter, staid, skb, QDF_RX);
}
/*
* 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 = hdd_ipa_get_wake_up_idle();
if (!enabled)
hdd_ipa_set_wake_up_idle(true);
skb->dev = adapter->dev;
skb->protocol = eth_type_trans(skb, skb->dev);
skb->ip_summed = CHECKSUM_NONE;
@@ -396,6 +441,12 @@ void hdd_ipa_send_skb_to_network(qdf_nbuf_t skb, qdf_netdev_t dev)
++adapter->hdd_stats.tx_rx_stats.rx_delivered[cpu_index];
else
++adapter->hdd_stats.tx_rx_stats.rx_refused[cpu_index];
/*
* Restore PF_WAKE_UP_IDLE flag in the task structure
*/
if (!enabled)
hdd_ipa_set_wake_up_idle(false);
}
void hdd_ipa_set_mcc_mode(bool mcc_mode)