OSDN Git Service

msm: ipa3: using rate limit api for ioctl calls
authorMohammed Javid <mjavid@codeaurora.org>
Fri, 13 Oct 2017 08:21:21 +0000 (13:51 +0530)
committerMohammed Javid <mjavid@codeaurora.org>
Mon, 6 Aug 2018 19:22:23 +0000 (00:52 +0530)
ipav3 ioctl calls input arguments validation failed cases,
replacing IPAERR()/IPAHAL_ERR() with IPAERR_RL()/IPAHAL_ERR_RL()
marco for controlling logs printing on the console.

Change-Id: I0b48b4a2f8b37c71aebe82c7b747b1d8f6c1e143
Acked-by: Pooja Kumari <kumarip@qti.qualcomm.com>
Acked-by: Ashok Vuyyuru <avuyyuru@qti.qualcomm.com>
Signed-off-by: Mohammed Javid <mjavid@codeaurora.org>
drivers/platform/msm/ipa/ipa_common_i.h
drivers/platform/msm/ipa/ipa_v3/ipa_flt.c
drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c
drivers/platform/msm/ipa/ipa_v3/ipa_i.h
drivers/platform/msm/ipa/ipa_v3/ipa_intf.c
drivers/platform/msm/ipa/ipa_v3/ipa_rt.c
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.c
drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h

index 00c3515..65107cc 100644 (file)
 #include <linux/ipc_logging.h>
 #include <linux/ipa.h>
 #include <linux/ipa_uc_offload.h>
+#include <linux/ratelimit.h>
+
+#define WARNON_RATELIMIT_BURST 1
+#define IPA_RATELIMIT_BURST 1
 
 #define __FILENAME__ \
        (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
                ipa_dec_client_disable_clks(&log_info); \
        } while (0)
 
+/*
+ * Printing one warning message in 5 seconds if multiple warning messages
+ * are coming back to back.
+ */
+
+#define WARN_ON_RATELIMIT_IPA(condition)                               \
+({                                                             \
+       static DEFINE_RATELIMIT_STATE(_rs,                      \
+                               DEFAULT_RATELIMIT_INTERVAL,     \
+                               WARNON_RATELIMIT_BURST);        \
+       int rtn = !!(condition);                                \
+                                                               \
+       if (unlikely(rtn && __ratelimit(&_rs)))                 \
+               WARN_ON(rtn);                                   \
+})
+
+/*
+ * Printing one error message in 5 seconds if multiple error messages
+ * are coming back to back.
+ */
+
+#define pr_err_ratelimited_ipa(fmt, ...)                               \
+       printk_ratelimited_ipa(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
+#define printk_ratelimited_ipa(fmt, ...)                               \
+({                                                                     \
+       static DEFINE_RATELIMIT_STATE(_rs,                              \
+                                     DEFAULT_RATELIMIT_INTERVAL,       \
+                                     IPA_RATELIMIT_BURST);             \
+                                                                       \
+       if (__ratelimit(&_rs))                                          \
+               printk(fmt, ##__VA_ARGS__);                             \
+})
+
 #define ipa_assert_on(condition)\
 do {\
        if (unlikely(condition))\
index 03c846e..f7d314a 100644 (file)
@@ -313,7 +313,7 @@ static int ipa_generate_flt_hw_tbl_img(enum ipa_ip_type ip,
        }
 
        if (ipahal_fltrt_allocate_hw_tbl_imgs(alloc_params)) {
-               IPAERR("fail to allocate FLT HW TBL images. IP %d\n", ip);
+               IPAERR_RL("fail to allocate FLT HW TBL images. IP %d\n", ip);
                rc = -ENOMEM;
                goto allocate_failed;
        }
@@ -321,14 +321,14 @@ static int ipa_generate_flt_hw_tbl_img(enum ipa_ip_type ip,
        if (ipa_translate_flt_tbl_to_hw_fmt(ip, IPA_RULE_HASHABLE,
                alloc_params->hash_bdy.base, alloc_params->hash_hdr.base,
                hash_bdy_start_ofst)) {
-               IPAERR("fail to translate hashable flt tbls to hw format\n");
+               IPAERR_RL("fail to translate hashable flt tbls to hw format\n");
                rc = -EPERM;
                goto translate_fail;
        }
        if (ipa_translate_flt_tbl_to_hw_fmt(ip, IPA_RULE_NON_HASHABLE,
                alloc_params->nhash_bdy.base, alloc_params->nhash_hdr.base,
                nhash_bdy_start_ofst)) {
-               IPAERR("fail to translate non-hash flt tbls to hw format\n");
+               IPAERR_RL("fail to translate non-hash flt tbls to hw format\n");
                rc = -EPERM;
                goto translate_fail;
        }
@@ -535,7 +535,7 @@ int __ipa_commit_flt_v3(enum ipa_ip_type ip)
        }
 
        if (ipa_generate_flt_hw_tbl_img(ip, &alloc_params)) {
-               IPAERR("fail to generate FLT HW TBL image. IP %d\n", ip);
+               IPAERR_RL("fail to generate FLT HW TBL image. IP %d\n", ip);
                rc = -EFAULT;
                goto prep_failed;
        }
@@ -737,25 +737,25 @@ static int __ipa_validate_flt_rule(const struct ipa_flt_rule *rule,
        if (rule->action != IPA_PASS_TO_EXCEPTION) {
                if (!rule->eq_attrib_type) {
                        if (!rule->rt_tbl_hdl) {
-                               IPAERR("invalid RT tbl\n");
+                               IPAERR_RL("invalid RT tbl\n");
                                goto error;
                        }
 
                        *rt_tbl = ipa3_id_find(rule->rt_tbl_hdl);
                        if (*rt_tbl == NULL) {
-                               IPAERR("RT tbl not found\n");
+                               IPAERR_RL("RT tbl not found\n");
                                goto error;
                        }
 
                        if ((*rt_tbl)->cookie != IPA_RT_TBL_COOKIE) {
-                               IPAERR("RT table cookie is invalid\n");
+                               IPAERR_RL("RT table cookie is invalid\n");
                                goto error;
                        }
                } else {
                        if (rule->rt_tbl_idx > ((ip == IPA_IP_v4) ?
                                IPA_MEM_PART(v4_modem_rt_index_hi) :
                                IPA_MEM_PART(v6_modem_rt_index_hi))) {
-                               IPAERR("invalid RT tbl\n");
+                               IPAERR_RL("invalid RT tbl\n");
                                goto error;
                        }
                }
@@ -769,7 +769,7 @@ static int __ipa_validate_flt_rule(const struct ipa_flt_rule *rule,
        if (rule->rule_id) {
                if ((rule->rule_id < ipahal_get_rule_id_hi_bit()) ||
                (rule->rule_id >= ((ipahal_get_rule_id_hi_bit()<<1)-1))) {
-                       IPAERR("invalid rule_id provided 0x%x\n"
+                       IPAERR_RL("invalid rule_id provided 0x%x\n"
                                "rule_id with bit 0x%x are auto generated\n",
                                rule->rule_id, ipahal_get_rule_id_hi_bit());
                        goto error;
@@ -803,8 +803,8 @@ static int __ipa_create_flt_entry(struct ipa3_flt_entry **entry,
        } else {
                id = ipa3_alloc_rule_id(&tbl->rule_ids);
                if (id < 0) {
-                       IPAERR("failed to allocate rule id\n");
-                       WARN_ON(1);
+                       IPAERR_RL("failed to allocate rule id\n");
+                       WARN_ON_RATELIMIT_IPA(1);
                        goto rule_id_fail;
                }
        }
@@ -829,8 +829,8 @@ static int __ipa_finish_flt_rule_add(struct ipa3_flt_tbl *tbl,
                entry->rt_tbl->ref_cnt++;
        id = ipa3_id_alloc(entry);
        if (id < 0) {
-               IPAERR("failed to add to tree\n");
-               WARN_ON(1);
+               IPAERR_RL("failed to add to tree\n");
+               WARN_ON_RATELIMIT_IPA(1);
                goto ipa_insert_failed;
        }
        *rule_hdl = id;
@@ -1393,7 +1393,7 @@ int ipa3_reset_flt(enum ipa_ip_type ip, bool user_only)
                list_for_each_entry_safe(entry, next, &tbl->head_flt_rule_list,
                                link) {
                        if (ipa3_id_find(entry->id) == NULL) {
-                               WARN_ON(1);
+                               WARN_ON_RATELIMIT_IPA(1);
                                mutex_unlock(&ipa3_ctx->lock);
                                return -EFAULT;
                        }
index f71eb95..f10b292 100644 (file)
@@ -341,7 +341,7 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
        }
        if (hdr_entry->cookie != IPA_HDR_COOKIE) {
                IPAERR_RL("Invalid header cookie %u\n", hdr_entry->cookie);
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                return -EINVAL;
        }
        IPADBG("Associated header is name=%s is_hdr_proc_ctx=%d\n",
@@ -371,7 +371,7 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
                bin = IPA_HDR_PROC_CTX_BIN1;
        } else {
                IPAERR_RL("unexpected needed len %d\n", needed_len);
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                goto bad_len;
        }
 
@@ -418,8 +418,8 @@ static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
 
        id = ipa3_id_alloc(entry);
        if (id < 0) {
-               IPAERR("failed to alloc id\n");
-               WARN_ON(1);
+               IPAERR_RL("failed to alloc id\n");
+               WARN_ON_RATELIMIT_IPA(1);
                goto ipa_insert_failed;
        }
        entry->id = id;
@@ -558,8 +558,8 @@ static int __ipa_add_hdr(struct ipa_hdr_add *hdr, bool user)
 
        id = ipa3_id_alloc(entry);
        if (id < 0) {
-               IPAERR("failed to alloc id\n");
-               WARN_ON(1);
+               IPAERR_RL("failed to alloc id\n");
+               WARN_ON_RATELIMIT_IPA(1);
                goto ipa_insert_failed;
        }
        entry->id = id;
@@ -1018,7 +1018,7 @@ int ipa3_reset_hdr(bool user_only)
                                if (entry->is_hdr_proc_ctx) {
                                        IPAERR("default header is proc ctx\n");
                                        mutex_unlock(&ipa3_ctx->lock);
-                                       WARN_ON(1);
+                                       WARN_ON_RATELIMIT_IPA(1);
                                        return -EFAULT;
                                }
                                IPADBG("skip default header\n");
@@ -1028,7 +1028,7 @@ int ipa3_reset_hdr(bool user_only)
 
                if (ipa3_id_find(entry->id) == NULL) {
                        mutex_unlock(&ipa3_ctx->lock);
-                       WARN_ON(1);
+                       WARN_ON_RATELIMIT_IPA(1);
                        return -EFAULT;
                }
 
@@ -1093,7 +1093,7 @@ int ipa3_reset_hdr(bool user_only)
 
                if (ipa3_id_find(ctx_entry->id) == NULL) {
                        mutex_unlock(&ipa3_ctx->lock);
-                       WARN_ON(1);
+                       WARN_ON_RATELIMIT_IPA(1);
                        return -EFAULT;
                }
 
index ea98433..0c55582 100644 (file)
@@ -98,7 +98,7 @@
 
 #define IPAERR_RL(fmt, args...) \
        do { \
-               pr_err_ratelimited(DRV_NAME " %s:%d " fmt, __func__,\
+               pr_err_ratelimited_ipa(DRV_NAME " %s:%d " fmt, __func__,\
                __LINE__, ## args);\
                if (ipa3_ctx) { \
                        IPA_IPC_LOGGING(ipa3_ctx->logbuf, \
index 2039c1b..456cf6c 100644 (file)
@@ -222,7 +222,7 @@ int ipa3_query_intf(struct ipa_ioc_query_intf *lookup)
        int result = -EINVAL;
 
        if (lookup == NULL) {
-               IPAERR("invalid param lookup=%p\n", lookup);
+               IPAERR_RL("invalid param lookup is NULL\n");
                return result;
        }
 
index 0cfe7f9..203fd14 100644 (file)
@@ -59,15 +59,15 @@ static int ipa_generate_rt_hw_rule(enum ipa_ip_type ip,
        gen_params.ipt = ip;
        gen_params.dst_pipe_idx = ipa3_get_ep_mapping(entry->rule.dst);
        if (gen_params.dst_pipe_idx == -1) {
-               IPAERR("Wrong destination pipe specified in RT rule\n");
-               WARN_ON(1);
+               IPAERR_RL("Wrong destination pipe specified in RT rule\n");
+               WARN_ON_RATELIMIT_IPA(1);
                return -EPERM;
        }
        if (!IPA_CLIENT_IS_CONS(entry->rule.dst)) {
-               IPAERR("No RT rule on IPA_client_producer pipe.\n");
-               IPAERR("pipe_idx: %d dst_pipe: %d\n",
+               IPAERR_RL("No RT rule on IPA_client_producer pipe.\n");
+               IPAERR_RL("pipe_idx: %d dst_pipe: %d\n",
                                gen_params.dst_pipe_idx, entry->rule.dst);
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                return -EPERM;
        }
 
@@ -163,14 +163,14 @@ static int ipa_translate_rt_tbl_to_hw_fmt(enum ipa_ip_type ip,
                        tbl_mem.size = tbl->sz[rlt] -
                                ipahal_get_hw_tbl_hdr_width();
                        if (ipahal_fltrt_allocate_hw_sys_tbl(&tbl_mem)) {
-                               IPAERR("fail to alloc sys tbl of size %d\n",
+                               IPAERR_RL("fail to alloc sys tbl of size %d\n",
                                        tbl_mem.size);
                                goto err;
                        }
 
                        if (ipahal_fltrt_write_addr_to_hdr(tbl_mem.phys_base,
                                hdr, tbl->idx - apps_start_idx, true)) {
-                               IPAERR("fail to wrt sys tbl addr to hdr\n");
+                               IPAERR_RL("fail to wrt sys tbl addr to hdr\n");
                                goto hdr_update_fail;
                        }
 
@@ -184,7 +184,7 @@ static int ipa_translate_rt_tbl_to_hw_fmt(enum ipa_ip_type ip,
                                res = ipa_generate_rt_hw_rule(ip, entry,
                                        tbl_mem_buf);
                                if (res) {
-                                       IPAERR("failed to gen HW RT rule\n");
+                                       IPAERR_RL("failed to gen HW RT rule\n");
                                        goto hdr_update_fail;
                                }
                                tbl_mem_buf += entry->hw_len;
@@ -201,7 +201,7 @@ static int ipa_translate_rt_tbl_to_hw_fmt(enum ipa_ip_type ip,
                        /* update the hdr at the right index */
                        if (ipahal_fltrt_write_addr_to_hdr(offset, hdr,
                                tbl->idx - apps_start_idx, true)) {
-                               IPAERR("fail to wrt lcl tbl ofst to hdr\n");
+                               IPAERR_RL("fail to wrt lcl tbl ofst to hdr\n");
                                goto hdr_update_fail;
                        }
 
@@ -213,7 +213,7 @@ static int ipa_translate_rt_tbl_to_hw_fmt(enum ipa_ip_type ip,
                                res = ipa_generate_rt_hw_rule(ip, entry,
                                        body_i);
                                if (res) {
-                                       IPAERR("failed to gen HW RT rule\n");
+                                       IPAERR_RL("failed to gen HW RT rule\n");
                                        goto err;
                                }
                                body_i += entry->hw_len;
@@ -313,7 +313,7 @@ static int ipa_prep_rt_tbl_for_cmt(enum ipa_ip_type ip,
 
                res = ipa_generate_rt_hw_rule(ip, entry, NULL);
                if (res) {
-                       IPAERR("failed to calculate HW RT rule size\n");
+                       IPAERR_RL("failed to calculate HW RT rule size\n");
                        return -EPERM;
                }
 
@@ -328,8 +328,8 @@ static int ipa_prep_rt_tbl_for_cmt(enum ipa_ip_type ip,
 
        if ((tbl->sz[IPA_RULE_HASHABLE] +
                tbl->sz[IPA_RULE_NON_HASHABLE]) == 0) {
-               WARN_ON(1);
-               IPAERR("rt tbl %s is with zero total size\n", tbl->name);
+               WARN_ON_RATELIMIT_IPA(1);
+               IPAERR_RL("rt tbl %s is with zero total size\n", tbl->name);
        }
 
        hdr_width = ipahal_get_hw_tbl_hdr_width();
@@ -840,8 +840,8 @@ static struct ipa3_rt_tbl *__ipa_add_rt_tbl(enum ipa_ip_type ip,
 
                id = ipa3_id_alloc(entry);
                if (id < 0) {
-                       IPAERR("failed to add to tree\n");
-                       WARN_ON(1);
+                       IPAERR_RL("failed to add to tree\n");
+                       WARN_ON_RATELIMIT_IPA(1);
                        goto ipa_insert_failed;
                }
                entry->id = id;
@@ -880,7 +880,7 @@ static int __ipa_del_rt_tbl(struct ipa3_rt_tbl *entry)
        else if (entry->set == &ipa3_ctx->rt_tbl_set[IPA_IP_v6])
                ip = IPA_IP_v6;
        else {
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                return -EPERM;
        }
 
@@ -913,14 +913,14 @@ static int __ipa_rt_validate_hndls(const struct ipa_rt_rule *rule,
                                struct ipa3_hdr_proc_ctx_entry **proc_ctx)
 {
        if (rule->hdr_hdl && rule->hdr_proc_ctx_hdl) {
-               IPAERR("rule contains both hdr_hdl and hdr_proc_ctx_hdl\n");
+               IPAERR_RL("rule contains both hdr_hdl and hdr_proc_ctx_hdl\n");
                return -EPERM;
        }
 
        if (rule->hdr_hdl) {
                *hdr = ipa3_id_find(rule->hdr_hdl);
                if ((*hdr == NULL) || ((*hdr)->cookie != IPA_HDR_COOKIE)) {
-                       IPAERR("rt rule does not point to valid hdr\n");
+                       IPAERR_RL("rt rule does not point to valid hdr\n");
                        return -EPERM;
                }
        } else if (rule->hdr_proc_ctx_hdl) {
@@ -928,7 +928,7 @@ static int __ipa_rt_validate_hndls(const struct ipa_rt_rule *rule,
                if ((*proc_ctx == NULL) ||
                        ((*proc_ctx)->cookie != IPA_PROC_HDR_COOKIE)) {
 
-                       IPAERR("rt rule does not point to valid proc ctx\n");
+                       IPAERR_RL("rt rule does not point to valid proc ctx\n");
                        return -EPERM;
                }
        }
@@ -961,8 +961,8 @@ static int __ipa_create_rt_entry(struct ipa3_rt_entry **entry,
        } else {
                id = ipa3_alloc_rule_id(&tbl->rule_ids);
                if (id < 0) {
-                       IPAERR("failed to allocate rule id\n");
-                       WARN_ON(1);
+                       IPAERR_RL("failed to allocate rule id\n");
+                       WARN_ON_RATELIMIT_IPA(1);
                        goto alloc_rule_id_fail;
                }
        }
@@ -989,8 +989,8 @@ static int __ipa_finish_rt_rule_add(struct ipa3_rt_entry *entry, u32 *rule_hdl,
                entry->proc_ctx->ref_cnt++;
        id = ipa3_id_alloc(entry);
        if (id < 0) {
-               IPAERR("failed to add to tree\n");
-               WARN_ON(1);
+               IPAERR_RL("failed to add to tree\n");
+               WARN_ON_RATELIMIT_IPA(1);
                goto ipa_insert_failed;
        }
        IPADBG("add rt rule tbl_idx=%d rule_cnt=%d rule_id=%d\n",
@@ -1504,7 +1504,7 @@ int ipa3_reset_rt(enum ipa_ip_type ip, bool user_only)
                list_for_each_entry_safe(rule, rule_next,
                                         &tbl->head_rt_rule_list, link) {
                        if (ipa3_id_find(rule->id) == NULL) {
-                               WARN_ON(1);
+                               WARN_ON_RATELIMIT_IPA(1);
                                mutex_unlock(&ipa3_ctx->lock);
                                return -EFAULT;
                        }
@@ -1542,7 +1542,7 @@ int ipa3_reset_rt(enum ipa_ip_type ip, bool user_only)
                }
 
                if (ipa3_id_find(tbl->id) == NULL) {
-                       WARN_ON(1);
+                       WARN_ON_RATELIMIT_IPA(1);
                        mutex_unlock(&ipa3_ctx->lock);
                        return -EFAULT;
                }
@@ -1656,7 +1656,7 @@ int ipa3_put_rt_tbl(u32 rt_tbl_hdl)
        else if (entry->set == &ipa3_ctx->rt_tbl_set[IPA_IP_v6])
                ip = IPA_IP_v6;
        else {
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                result = -EINVAL;
                goto ret;
        }
index 1aa49fd..c5be534 100644 (file)
@@ -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
@@ -185,17 +185,17 @@ static int ipa_fltrt_rule_generation_err_check(
                if (attrib->attrib_mask & IPA_FLT_NEXT_HDR ||
                    attrib->attrib_mask & IPA_FLT_TC ||
                    attrib->attrib_mask & IPA_FLT_FLOW_LABEL) {
-                       IPAHAL_ERR("v6 attrib's specified for v4 rule\n");
+                       IPAHAL_ERR_RL("v6 attrib's specified for v4 rule\n");
                        return -EPERM;
                }
        } else if (ipt == IPA_IP_v6) {
                if (attrib->attrib_mask & IPA_FLT_TOS ||
                    attrib->attrib_mask & IPA_FLT_PROTOCOL) {
-                       IPAHAL_ERR("v4 attrib's specified for v6 rule\n");
+                       IPAHAL_ERR_RL("v4 attrib's specified for v6 rule\n");
                        return -EPERM;
                }
        } else {
-               IPAHAL_ERR("unsupported ip %d\n", ipt);
+               IPAHAL_ERR_RL("unsupported ip %d\n", ipt);
                return -EPERM;
        }
 
@@ -234,7 +234,7 @@ static int ipa_rt_gen_hw_rule(struct ipahal_rt_rule_gen_params *params,
                break;
        default:
                IPAHAL_ERR("Invalid HDR type %d\n", params->hdr_type);
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                return -EINVAL;
        };
 
@@ -292,8 +292,8 @@ static int ipa_flt_gen_hw_rule(struct ipahal_flt_rule_gen_params *params,
                rule_hdr->u.hdr.action = 0x3;
                break;
        default:
-               IPAHAL_ERR("Invalid Rule Action %d\n", params->rule->action);
-               WARN_ON(1);
+               IPAHAL_ERR_RL("Invalid Rule Action %d\n", params->rule->action);
+               WARN_ON_RATELIMIT_IPA(1);
                return -EINVAL;
        }
        ipa_assert_on(params->rt_tbl_idx & ~0x1F);
@@ -314,14 +314,14 @@ static int ipa_flt_gen_hw_rule(struct ipahal_flt_rule_gen_params *params,
        if (params->rule->eq_attrib_type) {
                if (ipa_fltrt_generate_hw_rule_bdy_from_eq(
                        &params->rule->eq_attrib, &buf)) {
-                       IPAHAL_ERR("fail to generate hw rule from eq\n");
+                       IPAHAL_ERR_RL("fail to generate hw rule from eq\n");
                        return -EPERM;
                }
                en_rule = params->rule->eq_attrib.rule_eq_bitmap;
        } else {
                if (ipa_fltrt_generate_hw_rule_bdy(params->ipt,
                        &params->rule->attrib, &buf, &en_rule)) {
-                       IPAHAL_ERR("fail to generate hw rule\n");
+                       IPAHAL_ERR_RL("fail to generate hw rule\n");
                        return -EPERM;
                }
        }
@@ -341,7 +341,7 @@ static int ipa_flt_gen_hw_rule(struct ipahal_flt_rule_gen_params *params,
        if (*hw_len == 0) {
                *hw_len = buf - start;
        } else if (*hw_len != (buf - start)) {
-               IPAHAL_ERR("hw_len differs b/w passed=0x%x calc=%td\n",
+               IPAHAL_ERR_RL("hw_len differs b/w passed=0x%x calc=%td\n",
                        *hw_len, (buf - start));
                return -EPERM;
        }
@@ -1217,7 +1217,7 @@ static int ipa_fltrt_generate_hw_rule_bdy(enum ipa_ip_type ipt,
        sz = IPA3_0_HW_TBL_WIDTH * 2 + IPA3_0_HW_RULE_START_ALIGNMENT;
        extra_wrd_buf = kzalloc(sz, GFP_KERNEL);
        if (!extra_wrd_buf) {
-               IPAHAL_ERR("failed to allocate %d bytes\n", sz);
+               IPAHAL_ERR_RL("failed to allocate %d bytes\n", sz);
                rc = -ENOMEM;
                goto fail_extra_alloc;
        }
@@ -1225,7 +1225,7 @@ static int ipa_fltrt_generate_hw_rule_bdy(enum ipa_ip_type ipt,
        sz = IPA3_0_HW_RULE_BUF_SIZE + IPA3_0_HW_RULE_START_ALIGNMENT;
        rest_wrd_buf = kzalloc(sz, GFP_KERNEL);
        if (!rest_wrd_buf) {
-               IPAHAL_ERR("failed to allocate %d bytes\n", sz);
+               IPAHAL_ERR_RL("failed to allocate %d bytes\n", sz);
                rc = -ENOMEM;
                goto fail_rest_alloc;
        }
@@ -1243,14 +1243,14 @@ static int ipa_fltrt_generate_hw_rule_bdy(enum ipa_ip_type ipt,
 
        rc = ipa_fltrt_rule_generation_err_check(ipt, attrib);
        if (rc) {
-               IPAHAL_ERR("rule generation err check failed\n");
+               IPAHAL_ERR_RL("rule generation err check failed\n");
                goto fail_err_check;
        }
 
        if (ipt == IPA_IP_v4) {
                if (ipa_fltrt_generate_hw_rule_bdy_ip4(en_rule, attrib,
                        &extra_wrd_i, &rest_wrd_i)) {
-                       IPAHAL_ERR("failed to build ipv4 hw rule\n");
+                       IPAHAL_ERR_RL("failed to build ipv4 hw rule\n");
                        rc = -EPERM;
                        goto fail_err_check;
                }
@@ -1258,12 +1258,12 @@ static int ipa_fltrt_generate_hw_rule_bdy(enum ipa_ip_type ipt,
        } else if (ipt == IPA_IP_v6) {
                if (ipa_fltrt_generate_hw_rule_bdy_ip6(en_rule, attrib,
                        &extra_wrd_i, &rest_wrd_i)) {
-                       IPAHAL_ERR("failed to build ipv6 hw rule\n");
+                       IPAHAL_ERR_RL("failed to build ipv6 hw rule\n");
                        rc = -EPERM;
                        goto fail_err_check;
                }
        } else {
-               IPAHAL_ERR("unsupported ip %d\n", ipt);
+               IPAHAL_ERR_RL("unsupported ip %d\n", ipt);
                goto fail_err_check;
        }
 
@@ -1350,7 +1350,7 @@ static int ipa_fltrt_generate_hw_rule_bdy_from_eq(
         * of equations that needs extra word param
         */
        if (extra_bytes > 13) {
-               IPAHAL_ERR("too much extra bytes\n");
+               IPAHAL_ERR_RL("too much extra bytes\n");
                return -EPERM;
        } else if (extra_bytes > IPA3_0_HW_TBL_HDR_WIDTH) {
                /* two extra words */
@@ -1843,7 +1843,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_SRC_ADDR) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1871,7 +1871,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_DST_ADDR) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1899,7 +1899,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_TOS_MASKED) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1916,7 +1916,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_MAC_DST_ADDR_ETHER_II) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1932,7 +1932,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_MAC_SRC_ADDR_ETHER_II) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1948,7 +1948,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_MAC_DST_ADDR_802_3) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -1964,7 +1964,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_MAC_SRC_ADDR_802_3) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq128, ofst_meq128)) {
-                       IPAHAL_ERR("ran out of meq128 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq128 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2073,7 +2073,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
 
        if (attrib->attrib_mask & IPA_FLT_MAC_ETHER_TYPE) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ofst_meq32, ofst_meq32)) {
-                       IPAHAL_ERR("ran out of meq32 eq\n");
+                       IPAHAL_ERR_RL("ran out of meq32 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2089,7 +2089,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_TYPE) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_meq32,
                        ihl_ofst_meq32)) {
-                       IPAHAL_ERR("ran out of ihl_meq32 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_meq32 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2104,7 +2104,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_CODE) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_meq32,
                        ihl_ofst_meq32)) {
-                       IPAHAL_ERR("ran out of ihl_meq32 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_meq32 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2119,7 +2119,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_SPI) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_meq32,
                        ihl_ofst_meq32)) {
-                       IPAHAL_ERR("ran out of ihl_meq32 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_meq32 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2144,7 +2144,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_SRC_PORT) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_rng16,
                                ihl_ofst_rng16)) {
-                       IPAHAL_ERR("ran out of ihl_rng16 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_rng16 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2160,7 +2160,7 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_DST_PORT) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_rng16,
                                ihl_ofst_rng16)) {
-                       IPAHAL_ERR("ran out of ihl_rng16 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_rng16 eq\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2176,11 +2176,11 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_SRC_PORT_RANGE) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_rng16,
                                ihl_ofst_rng16)) {
-                       IPAHAL_ERR("ran out of ihl_rng16 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_rng16 eq\n");
                        return -EPERM;
                }
                if (attrib->src_port_hi < attrib->src_port_lo) {
-                       IPAHAL_ERR("bad src port range param\n");
+                       IPAHAL_ERR_RL("bad src port range param\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2196,11 +2196,11 @@ static int ipa_flt_generate_eq_ip6(enum ipa_ip_type ip,
        if (attrib->attrib_mask & IPA_FLT_DST_PORT_RANGE) {
                if (IPA_IS_RAN_OUT_OF_EQ(ipa3_0_ihl_ofst_rng16,
                                ihl_ofst_rng16)) {
-                       IPAHAL_ERR("ran out of ihl_rng16 eq\n");
+                       IPAHAL_ERR_RL("ran out of ihl_rng16 eq\n");
                        return -EPERM;
                }
                if (attrib->dst_port_hi < attrib->dst_port_lo) {
-                       IPAHAL_ERR("bad dst port range param\n");
+                       IPAHAL_ERR_RL("bad dst port range param\n");
                        return -EPERM;
                }
                *en_rule |= IPA_GET_RULE_EQ_BIT_PTRN(
@@ -2515,7 +2515,7 @@ static int ipa_flt_parse_hw_rule(u8 *addr, struct ipahal_flt_rule_entry *rule)
                break;
        default:
                IPAHAL_ERR("Invalid Rule Action %d\n", rule_hdr->u.hdr.action);
-               WARN_ON(1);
+               WARN_ON_RATELIMIT_IPA(1);
                rule->rule.action = rule_hdr->u.hdr.action;
        }
 
@@ -2974,7 +2974,7 @@ static int ipa_fltrt_alloc_init_tbl_hdr(
        obj = &ipahal_fltrt_objs[ipahal_ctx->hw_type];
 
        if (!params) {
-               IPAHAL_ERR("Input error: params=%p\n", params);
+               IPAHAL_ERR_RL("Input error: params= NULL\n");
                return -EINVAL;
        }
 
@@ -2983,7 +2983,7 @@ static int ipa_fltrt_alloc_init_tbl_hdr(
                params->nhash_hdr.size,
                &params->nhash_hdr.phys_base, GFP_KERNEL);
        if (!params->nhash_hdr.base) {
-               IPAHAL_ERR("fail to alloc DMA buff of size %d\n",
+               IPAHAL_ERR_RL("fail to alloc DMA buff of size %d\n",
                        params->nhash_hdr.size);
                goto nhash_alloc_fail;
        }
@@ -2994,7 +2994,7 @@ static int ipa_fltrt_alloc_init_tbl_hdr(
                        params->hash_hdr.size, &params->hash_hdr.phys_base,
                        GFP_KERNEL);
                if (!params->hash_hdr.base) {
-                       IPAHAL_ERR("fail to alloc DMA buff of size %d\n",
+                       IPAHAL_ERR_RL("fail to alloc DMA buff of size %d\n",
                                params->hash_hdr.size);
                        goto hash_alloc_fail;
                }
@@ -3127,21 +3127,21 @@ int ipahal_fltrt_allocate_hw_tbl_imgs(
 
        /* Input validation */
        if (!params) {
-               IPAHAL_ERR("Input err: no params\n");
+               IPAHAL_ERR_RL("Input err: no params\n");
                return -EINVAL;
        }
        if (params->ipt >= IPA_IP_MAX) {
-               IPAHAL_ERR("Input err: Invalid ip type %d\n", params->ipt);
+               IPAHAL_ERR_RL("Input err: Invalid ip type %d\n", params->ipt);
                return -EINVAL;
        }
 
        if (ipa_fltrt_alloc_init_tbl_hdr(params)) {
-               IPAHAL_ERR("fail to alloc and init tbl hdr\n");
+               IPAHAL_ERR_RL("fail to alloc and init tbl hdr\n");
                return -ENOMEM;
        }
 
        if (ipa_fltrt_alloc_lcl_bdy(params)) {
-               IPAHAL_ERR("fail to alloc tbl bodies\n");
+               IPAHAL_ERR_RL("fail to alloc tbl bodies\n");
                goto bdy_alloc_fail;
        }
 
@@ -3402,13 +3402,17 @@ int ipahal_flt_generate_equation(enum ipa_ip_type ipt,
        IPAHAL_DBG_LOW("Entry\n");
 
        if (ipt >= IPA_IP_MAX) {
-               IPAHAL_ERR("Input err: Invalid ip type %d\n", ipt);
+               IPAHAL_ERR_RL("Input err: Invalid ip type %d\n", ipt);
+               return -EINVAL;
+       }
+
+       if (!attrib) {
+               IPAHAL_ERR_RL("Input err: attrib= NULL\n");
                return -EINVAL;
        }
 
-       if (!attrib || !eq_atrb) {
-               IPAHAL_ERR("Input err: attrib=%p eq_atrb=%p\n",
-                       attrib, eq_atrb);
+       if (!eq_atrb) {
+               IPAHAL_ERR_RL("Input err: eq_atrb = NULL\n");
                return -EINVAL;
        }
 
index d6a496e..f2c0ed0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-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
                        IPAHAL_DRV_NAME " %s:%d " fmt, ## args); \
        } while (0)
 
+#define IPAHAL_ERR_RL(fmt, args...) \
+       do { \
+               pr_err_ratelimited_ipa(IPAHAL_DRV_NAME " %s:%d " fmt, \
+               __func__, __LINE__, ## args); \
+               IPA_IPC_LOGGING(ipa_get_ipc_logbuf(), \
+                       IPAHAL_DRV_NAME " %s:%d " fmt, ## args); \
+               IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
+                       IPAHAL_DRV_NAME " %s:%d " fmt, ## args); \
+       } while (0)
+
 /*
  * struct ipahal_context - HAL global context data
  * @hw_type: IPA H/W type/version.