summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/platform/msm/ipa/ipa_v2/ipa_rt.c11
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_rt.c11
2 files changed, 20 insertions, 2 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_rt.c b/drivers/platform/msm/ipa/ipa_v2/ipa_rt.c
index 293a60a60881..4a68b96ca89a 100644
--- a/drivers/platform/msm/ipa/ipa_v2/ipa_rt.c
+++ b/drivers/platform/msm/ipa/ipa_v2/ipa_rt.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1143,6 +1143,15 @@ int __ipa_del_rt_rule(u32 rule_hdl)
return -EINVAL;
}
+ if (!strcmp(entry->tbl->name, IPA_DFLT_RT_TBL_NAME)) {
+ IPADBG("Deleting rule from default rt table idx=%u\n",
+ entry->tbl->idx);
+ if (entry->tbl->rule_cnt == 1) {
+ IPAERR_RL("Default tbl last rule cannot be deleted\n");
+ return -EINVAL;
+ }
+ }
+
if (entry->hdr)
__ipa_release_hdr(entry->hdr->id);
else if (entry->proc_ctx)
diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c
index b9af782b4f6e..a10e2cb9ce8b 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1281,6 +1281,15 @@ int __ipa3_del_rt_rule(u32 rule_hdl)
return -EINVAL;
}
+ if (!strcmp(entry->tbl->name, IPA_DFLT_RT_TBL_NAME)) {
+ IPADBG("Deleting rule from default rt table idx=%u\n",
+ entry->tbl->idx);
+ if (entry->tbl->rule_cnt == 1) {
+ IPAERR_RL("Default tbl last rule cannot be deleted\n");
+ return -EINVAL;
+ }
+ }
+
if (entry->hdr)
__ipa3_release_hdr(entry->hdr->id);
else if (entry->proc_ctx)