Merge "dataipa: Mutex lock the ipa_lnx_stats_ioctl"
diff --git a/drivers/platform/msm/gsi/gsi.c b/drivers/platform/msm/gsi/gsi.c
index 2145042..10cd2d7 100644
--- a/drivers/platform/msm/gsi/gsi.c
+++ b/drivers/platform/msm/gsi/gsi.c
@@ -3612,7 +3612,7 @@
}
if (ctx->state == GSI_CHAN_STATE_STOP_IN_PROC) {
- GSIERR("chan=%lu busy try again\n", chan_hdl);
+ GSIDBG("chan=%lu busy try again\n", chan_hdl);
res = -GSI_STATUS_AGAIN;
goto free_lock;
}
diff --git a/drivers/platform/msm/ipa/ipa_common_i.h b/drivers/platform/msm/ipa/ipa_common_i.h
index 730a57e..186ee54 100644
--- a/drivers/platform/msm/ipa/ipa_common_i.h
+++ b/drivers/platform/msm/ipa/ipa_common_i.h
@@ -189,8 +189,8 @@
(x == ipa3_get_ep_mapping(IPA_CLIENT_AQC_ETHERNET_PROD)) || \
(x == ipa3_get_ep_mapping(IPA_CLIENT_RTK_ETHERNET_PROD)))
-#define IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC (3000)
-#define IPA_GSI_CHANNEL_STOP_SLEEP_MAX_USEC (5000)
+#define IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC (1000)
+#define IPA_GSI_CHANNEL_STOP_SLEEP_MAX_USEC (2000)
#define STR_ETH_IFACE "eth"
#define STR_ETH0_IFACE "eth0"
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
index 79d675d..ac14f07 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c
@@ -49,6 +49,7 @@
__stringify(NTN),
__stringify(NTN3),
__stringify(EMAC),
+ __stringify(IEMAC),
};
const char *ipa3_event_name[IPA_EVENT_MAX_NUM] = {
@@ -1612,6 +1613,11 @@
int nbytes;
int cnt = 0;
+ if (!ipa3_odl_ctx) {
+ IPADBG("ODL stats not supported\n");
+ return 0;
+ }
+
nbytes = scnprintf(dbg_buff, IPA_MAX_MSG_LEN,
"ODL received pkt =%u\n"
"ODL processed pkt to DIAG=%u\n"
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
index d7a09a8..56ddeb9 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c
@@ -102,6 +102,8 @@
#define IPA_QMAP_ID_BYTE 0
+#define IPA_MEM_ALLOC_RETRY 5
+
static int ipa3_tx_switch_to_intr_mode(struct ipa3_sys_context *sys);
static int ipa3_rx_switch_to_intr_mode(struct ipa3_sys_context *sys);
static struct sk_buff *ipa3_get_skb_ipa_rx(unsigned int len, gfp_t flags);
@@ -1454,7 +1456,10 @@
goto fail_gen;
}
- *clnt_hdl = 0;
+ /*checking for clnt_hdl having any previously updated
+ value or not, if not then assigning 0 */
+ if(*clnt_hdl == -1)
+ *clnt_hdl = 0;
if (sys_in->client >= IPA_CLIENT_MAX || sys_in->desc_fifo_sz == 0) {
IPAERR("bad parm client:%d fifo_sz:%d\n",
@@ -2737,8 +2742,8 @@
goto fail_kmem_cache_alloc;
rx_pkt = ipa3_alloc_rx_pkt_page(GFP_KERNEL, true, sys);
if (unlikely(!rx_pkt)) {
- IPAERR("ipa3_alloc_rx_pkt_page fails\n");
- break;
+ IPAERR_RL("ipa3_alloc_rx_pkt_page fails\n");
+ goto fail_kmem_cache_alloc;
}
rx_pkt->sys = sys;
sys->repl->cache[curr] = rx_pkt;
@@ -6628,6 +6633,33 @@
return result;
}
+static void *ipa3_ring_alloc(struct device *dev, size_t size,
+ dma_addr_t *dma_handle, gfp_t gfp)
+{
+ void *va_addr;
+ int retry_cnt = 0;
+
+alloc:
+ va_addr = dma_alloc_coherent(dev, size, dma_handle, gfp);
+ if (!va_addr) {
+ if (retry_cnt < IPA_MEM_ALLOC_RETRY) {
+ IPADBG("Fail to dma alloc retry cnt = %d\n",
+ retry_cnt);
+ retry_cnt++;
+ goto alloc;
+ }
+
+ if (gfp == GFP_ATOMIC) {
+ gfp = GFP_KERNEL;
+ goto alloc;
+ }
+ IPAERR("fail to dma alloc %u bytes\n", size);
+ ipa_assert();
+ }
+
+ return va_addr;
+}
+
static int ipa_gsi_setup_event_ring(struct ipa3_ep_context *ep,
u32 ring_size, gfp_t mem_flag)
{
@@ -6648,13 +6680,8 @@
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_16B;
gsi_evt_ring_props.ring_len = ring_size;
gsi_evt_ring_props.ring_base_vaddr =
- dma_alloc_coherent(ipa3_ctx->pdev, gsi_evt_ring_props.ring_len,
+ ipa3_ring_alloc(ipa3_ctx->pdev, gsi_evt_ring_props.ring_len,
&evt_dma_addr, mem_flag);
- if (!gsi_evt_ring_props.ring_base_vaddr) {
- IPAERR("fail to dma alloc %u bytes\n",
- gsi_evt_ring_props.ring_len);
- return -ENOMEM;
- }
gsi_evt_ring_props.ring_base_addr = evt_dma_addr;
/* copy mem info */
@@ -6781,14 +6808,8 @@
gsi_channel_props.ring_len = ring_size;
gsi_channel_props.ring_base_vaddr =
- dma_alloc_coherent(ipa3_ctx->pdev, gsi_channel_props.ring_len,
+ ipa3_ring_alloc(ipa3_ctx->pdev, gsi_channel_props.ring_len,
&dma_addr, mem_flag);
- if (!gsi_channel_props.ring_base_vaddr) {
- IPAERR("fail to dma alloc %u bytes\n",
- gsi_channel_props.ring_len);
- result = -ENOMEM;
- goto fail_alloc_channel_ring;
- }
gsi_channel_props.ring_base_addr = dma_addr;
/* copy mem info */
@@ -6871,7 +6892,6 @@
dma_free_coherent(ipa3_ctx->pdev, ep->gsi_mem_info.chan_ring_len,
ep->gsi_mem_info.chan_ring_base_vaddr,
ep->gsi_mem_info.chan_ring_base_addr);
-fail_alloc_channel_ring:
fail_get_gsi_ep_info:
if (ep->gsi_evt_ring_hdl != ~0) {
gsi_dealloc_evt_ring(ep->gsi_evt_ring_hdl);
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c b/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
index 3043ad7..b255adb 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_hw_stats.c
@@ -1161,7 +1161,7 @@
goto destroy_imm;
}
- stats_all = kzalloc(sizeof(*stats_all), GFP_KERNEL);
+ stats_all = vmalloc(sizeof(*stats_all));
if (!stats_all) {
IPADBG("failed to alloc memory\n");
ret = -ENOMEM;
@@ -1248,7 +1248,7 @@
ret = 0;
free_stats:
- kfree(stats_all);
+ vfree(stats_all);
stats = NULL;
destroy_imm:
for (i = 0; i < num_cmd; i++)
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
index 49735eb..4551308 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c
@@ -553,8 +553,8 @@
mutex_lock(&ipa3_qmi_lock);
- if (client_handle != ipa_q6_clnt) {
- IPADBG("Q6 QMI clinet pointer already freed\n");
+ if (!client_handle || client_handle != ipa_q6_clnt ) {
+ IPADBG("Q6 QMI client pointer already freed\n");
mutex_unlock(&ipa3_qmi_lock);
return -EINVAL;
}
diff --git a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
index af242f9..60ed1a0 100644
--- a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
@@ -3778,7 +3778,7 @@
ipa3_del_a7_qmap_hdr();
}
ipa3_del_mux_qmap_hdrs();
- if (!ipa3_qmi_ctx->modem_cfg_emb_pipe_flt)
+ if (ipa3_qmi_ctx && !ipa3_qmi_ctx->modem_cfg_emb_pipe_flt)
ipa3_wwan_del_ul_flt_rule_to_ipa();
ipa3_cleanup_deregister_intf();
/* reset dl_csum_offload_enabled */
diff --git a/ipanat/Android.bp b/ipanat/Android.bp
index aecb5b2..0bcf3a0 100644
--- a/ipanat/Android.bp
+++ b/ipanat/Android.bp
@@ -24,10 +24,6 @@
vendor: true,
clang: true,
- clang_cflags: [
- "-DDEBUG",
- "-DFEATURE_IPA_ANDROID",
- "-Wno-int-conversion",
- ],
+ cflags: ["-DDEBUG"] + ["-DFEATURE_IPA_ANDROID"] + ["-Wno-int-conversion"],
}
diff --git a/kernel-tests/Android.bp b/kernel-tests/Android.bp
index 773802e..b189d11 100644
--- a/kernel-tests/Android.bp
+++ b/kernel-tests/Android.bp
@@ -1,11 +1,7 @@
cc_binary {
name: "ipa-kernel-tests",
- clang_cflags: [
- "-Wno-missing-field-initializers",
- "-Wno-int-to-pointer-cast",
- "-Wno-int-conversion",
- ],
+ cflags: ["-Wno-missing-field-initializers"] + ["-Wno-int-to-pointer-cast"] + ["-Wno-int-conversion"],
header_libs: ["device_kernel_headers"]+["qti_kernel_headers"]+["qti_ipa_test_kernel_headers"],