From 4f20db56bc49643e995b340eaf48ac107bb75f4c Mon Sep 17 00:00:00 2001 From: Orhan K AKYILDIZ Date: Wed, 30 Dec 2015 12:35:44 -0800 Subject: [PATCH] qcacld-3.0: fix softlock-up caused by co-existence of NAPI and rx-thread. If rxthread is on, NAPI will call the kernel-thread context API (instead of softirq context) API to transfer the packet to the stack. Eventually, this part will be re-considered when multi-queue NAPI gets in, which will eliminate the rx-thread. Change-Id: Ib3d4d1450fb36f5c1e710802ceaab5d015e20c7d CRs-Fixed: 957299 --- core/hdd/src/wlan_hdd_softap_tx_rx.c | 4 ++-- core/hdd/src/wlan_hdd_tx_rx.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index f50b582a6499..03e4392123b9 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -581,7 +581,7 @@ CDF_STATUS hdd_softap_rx_packet_cbk(void *cds_context, */ cdf_net_buf_debug_release_skb(rxBuf); - if (hdd_napi_enabled(HDD_NAPI_ANY)) + if (hdd_napi_enabled(HDD_NAPI_ANY) && !pHddCtx->config->enableRxThread) rxstat = netif_receive_skb(skb); else rxstat = netif_rx_ni(skb); diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 7479870fd3b4..2d8b0de8ca95 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -744,7 +744,8 @@ CDF_STATUS hdd_rx_packet_cbk(void *cds_context, cdf_nbuf_t rxBuf, uint8_t staId) if (HDD_LRO_NO_RX == hdd_lro_rx(pHddCtx, pAdapter, skb)) { - if (hdd_napi_enabled(HDD_NAPI_ANY)) + if (hdd_napi_enabled(HDD_NAPI_ANY) && + !pHddCtx->config->enableRxThread) rxstat = netif_receive_skb(skb); else rxstat = netif_rx_ni(skb);