diff options
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_common_i.h | 37 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_flt.c | 28 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c | 18 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_i.h | 2 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_intf.c | 2 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_rt.c | 52 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.c | 96 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h | 12 |
8 files changed, 149 insertions, 98 deletions
diff --git a/drivers/platform/msm/ipa/ipa_common_i.h b/drivers/platform/msm/ipa/ipa_common_i.h index 00c3515bae30..65107cc62a5d 100644 --- a/drivers/platform/msm/ipa/ipa_common_i.h +++ b/drivers/platform/msm/ipa/ipa_common_i.h @@ -18,6 +18,10 @@ #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__) @@ -103,6 +107,39 @@ 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))\ diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c index 03c846ea9596..f7d314ad7335 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c @@ -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; } diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c index 956546a30648..63e3f8578219 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c @@ -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; } @@ -1108,7 +1108,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; } diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index ea98433bbdf2..0c55582d1571 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -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, \ diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_intf.c b/drivers/platform/msm/ipa/ipa_v3/ipa_intf.c index 2039c1ba0a3c..456cf6c9fd60 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_intf.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_intf.c @@ -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; } diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c index 0cfe7f92aff7..203fd142b213 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c @@ -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; } diff --git a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.c b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.c index 1aa49fde3ed1..c5be5344f82d 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_fltrt.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 @@ -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( ¶ms->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, ¶ms->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, ¶ms->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, ¶ms->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; } diff --git a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h index d6a496e56861..f2c0ed0ae988 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipahal/ipahal_i.h @@ -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 @@ -46,6 +46,16 @@ 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. |
