summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2016-06-29 16:03:12 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-12 11:41:41 -0700
commit3e025accad4944728b8d9f68c8ed251b98989c5a (patch)
tree914933972f7b2987b321d0a08510b4b79e596e7b /drivers
parent400520a6e2f06cc7c45e386e769a85d4aded565b (diff)
msm: ipa: exit when hdr proc ctx table is full
Return error when header processing table is full so that ipa driver does not add infinite number of headers in SW cache. Change-Id: I97360dec3ec892aab688d332122c75283c3e6cf6 Acked-by: Shihuan Liu <shihuanl@qti.qualcomm.com> Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c9
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c9
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c b/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c
index 761aa6f9a4a1..790a0b41147e 100644
--- a/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c
+++ b/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c
@@ -485,6 +485,7 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
struct ipa_hdr_proc_ctx_tbl *htbl = &ipa_ctx->hdr_proc_ctx_tbl;
int id;
int needed_len;
+ int mem_size;
IPADBG("processing type %d hdr_hdl %d\n",
proc_ctx->type, proc_ctx->hdr_hdl);
@@ -529,6 +530,14 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
goto bad_len;
}
+ mem_size = (ipa_ctx->hdr_proc_ctx_tbl_lcl) ?
+ IPA_MEM_PART(apps_hdr_proc_ctx_size) :
+ IPA_MEM_PART(apps_hdr_proc_ctx_size_ddr);
+ if (htbl->end + ipa_hdr_proc_ctx_bin_sz[bin] > mem_size) {
+ IPAERR("hdr proc ctx table overflow\n");
+ goto bad_len;
+ }
+
if (list_empty(&htbl->head_free_offset_list[bin])) {
offset = kmem_cache_zalloc(ipa_ctx->hdr_proc_ctx_offset_cache,
GFP_KERNEL);
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c
index 851e71777c32..029647213531 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c
@@ -324,6 +324,7 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
struct ipa3_hdr_proc_ctx_tbl *htbl = &ipa3_ctx->hdr_proc_ctx_tbl;
int id;
int needed_len;
+ int mem_size;
IPADBG_LOW("processing type %d hdr_hdl %d\n",
proc_ctx->type, proc_ctx->hdr_hdl);
@@ -366,6 +367,14 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
goto bad_len;
}
+ mem_size = (ipa3_ctx->hdr_proc_ctx_tbl_lcl) ?
+ IPA_MEM_PART(apps_hdr_proc_ctx_size) :
+ IPA_MEM_PART(apps_hdr_proc_ctx_size_ddr);
+ if (htbl->end + ipa_hdr_proc_ctx_bin_sz[bin] > mem_size) {
+ IPAERR("hdr proc ctx table overflow\n");
+ goto bad_len;
+ }
+
if (list_empty(&htbl->head_free_offset_list[bin])) {
offset = kmem_cache_zalloc(ipa3_ctx->hdr_proc_ctx_offset_cache,
GFP_KERNEL);