qcacmn: Add logs in qdf_nbuf_alloc()

In qdf_nbuf_alloc() function, pass function name and
line number of caller and log the same in case of failure,
this approach helps to remove error logs in caller function
there by reducing text segment.

Also add qdf_rl and qdf_rl_nofl_* macros.

Change-Id: Ib8ce83335807cfbd2d83d1f165d6bec1dc1e4c94
CRs-Fixed: 2281983
此提交包含在:
Arif Hussain
2018-07-20 12:58:31 -07:00
提交者 nshrivas
父節點 58189eb0bd
當前提交 6e9fa6a725
共有 6 個檔案被更改,包括 77 行新增29 行删除

查看文件

@@ -596,8 +596,27 @@ void __qdf_nbuf_num_frags_init(struct sk_buff *skb)
/*
* prototypes. Implemented in qdf_nbuf.c
*/
__qdf_nbuf_t __qdf_nbuf_alloc(__qdf_device_t osdev, size_t size, int reserve,
int align, int prio);
/**
* __qdf_nbuf_alloc() - Allocate nbuf
* @osdev: Device handle
* @size: Netbuf requested size
* @reserve: headroom to start with
* @align: Align
* @prio: Priority
* @func: Function name of the call site
* @line: line number of the call site
*
* This allocates an nbuf aligns if needed and reserves some space in the front,
* since the reserve is done after alignment the reserve value if being
* unaligned will result in an unaligned address.
*
* Return: nbuf or %NULL if no memory
*/
__qdf_nbuf_t
__qdf_nbuf_alloc(__qdf_device_t osdev, size_t size, int reserve, int align,
int prio, const char *func, uint32_t line);
void __qdf_nbuf_free(struct sk_buff *skb);
QDF_STATUS __qdf_nbuf_map(__qdf_device_t osdev,
struct sk_buff *skb, qdf_dma_dir_t dir);

查看文件

@@ -106,6 +106,9 @@
#define __QDF_TRACE_RL(log_level, module_id, format, args...) \
__QDF_TRACE_RATE_LIMITED(module_id, log_level, FL(format), ## args)
#define __QDF_TRACE_RL_NO_FL(log_level, module_id, format, args...) \
__QDF_TRACE_RATE_LIMITED(module_id, log_level, format, ## args)
static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
#ifdef WLAN_LOG_FATAL
@@ -115,10 +118,13 @@ static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
__QDF_TRACE_NO_FL(QDF_TRACE_LEVEL_FATAL, ## params)
#define QDF_TRACE_FATAL_RL(params...) \
__QDF_TRACE_RL(QDF_TRACE_LEVEL_FATAL, ## params)
#define QDF_TRACE_FATAL_RL_NO_FL(params...) \
__QDF_TRACE_RL_NO_FL(QDF_TRACE_LEVEL_FATAL, ## params)
#else
#define QDF_TRACE_FATAL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_FATAL_NO_FL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_FATAL_RL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_FATAL_RL_NO_FL(params...) __qdf_trace_noop(params)
#endif
#ifdef WLAN_LOG_ERROR
@@ -128,10 +134,13 @@ static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
__QDF_TRACE_NO_FL(QDF_TRACE_LEVEL_ERROR, ## params)
#define QDF_TRACE_ERROR_RL(params...) \
__QDF_TRACE_RL(QDF_TRACE_LEVEL_ERROR, ## params)
#define QDF_TRACE_ERROR_RL_NO_FL(params...) \
__QDF_TRACE_RL_NO_FL(QDF_TRACE_LEVEL_ERROR, ## params)
#else
#define QDF_TRACE_ERROR(params...) __qdf_trace_noop(params)
#define QDF_TRACE_ERROR_NO_FL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_ERROR_RL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_ERROR_RL_NO_FL(params...) __qdf_trace_noop(params)
#endif
#ifdef WLAN_LOG_WARN
@@ -141,10 +150,13 @@ static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
__QDF_TRACE_NO_FL(QDF_TRACE_LEVEL_WARN, ## params)
#define QDF_TRACE_WARN_RL(params...) \
__QDF_TRACE_RL(QDF_TRACE_LEVEL_WARN, ## params)
#define QDF_TRACE_WARN_RL_NO_FL(params...) \
__QDF_TRACE_RL_NO_FL(QDF_TRACE_LEVEL_WARN, ## params)
#else
#define QDF_TRACE_WARN(params...) __qdf_trace_noop(params)
#define QDF_TRACE_WARN_NO_FL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_WARN_RL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_WARN_RL_NO_FL(params...) __qdf_trace_noop(params)
#endif
#ifdef WLAN_LOG_INFO
@@ -154,10 +166,13 @@ static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
__QDF_TRACE_NO_FL(QDF_TRACE_LEVEL_INFO, ## params)
#define QDF_TRACE_INFO_RL(params...) \
__QDF_TRACE_RL(QDF_TRACE_LEVEL_INFO, ## params)
#define QDF_TRACE_INFO_RL_NO_FL(params...) \
__QDF_TRACE_RL_NO_FL(QDF_TRACE_LEVEL_INFO, ## params)
#else
#define QDF_TRACE_INFO(params...) __qdf_trace_noop(params)
#define QDF_TRACE_INFO_NO_FL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_INFO_RL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_INFO_RL_NO_FL(params...) __qdf_trace_noop(params)
#endif
#ifdef WLAN_LOG_DEBUG
@@ -167,10 +182,13 @@ static inline void __qdf_trace_noop(QDF_MODULE_ID module, char *format, ...) { }
__QDF_TRACE_NO_FL(QDF_TRACE_LEVEL_DEBUG, ## params)
#define QDF_TRACE_DEBUG_RL(params...) \
__QDF_TRACE_RL(QDF_TRACE_LEVEL_DEBUG, ## params)
#define QDF_TRACE_DEBUG_RL_NO_FL(params...) \
__QDF_TRACE_RL_NO_FL(QDF_TRACE_LEVEL_DEBUG, ## params)
#else
#define QDF_TRACE_DEBUG(params...) __qdf_trace_noop(params)
#define QDF_TRACE_DEBUG_NO_FL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_DEBUG_RL(params...) __qdf_trace_noop(params)
#define QDF_TRACE_DEBUG_RL_NO_FL(params...) __qdf_trace_noop(params)
#endif
#ifdef WLAN_LOG_ENTER

查看文件

@@ -354,24 +354,10 @@ void __qdf_nbuf_count_dec(__qdf_nbuf_t nbuf)
qdf_export_symbol(__qdf_nbuf_count_dec);
#endif
/**
* __qdf_nbuf_alloc() - Allocate nbuf
* @hdl: Device handle
* @size: Netbuf requested size
* @reserve: headroom to start with
* @align: Align
* @prio: Priority
*
* This allocates an nbuf aligns if needed and reserves some space in the front,
* since the reserve is done after alignment the reserve value if being
* unaligned will result in an unaligned address.
*
* Return: nbuf or %NULL if no memory
*/
#if defined(QCA_WIFI_QCA8074) && defined (BUILD_X86)
struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve,
int align, int prio)
int align, int prio, const char *func,
uint32_t line)
{
struct sk_buff *skb;
unsigned long offset;
@@ -389,7 +375,8 @@ realloc:
skb = pld_nbuf_pre_alloc(size);
if (!skb) {
pr_info("ERROR:NBUF alloc failed\n");
qdf_nofl_err("NBUF alloc failed %zuB @ %s:%d",
size, func, line);
return NULL;
}
@@ -401,7 +388,8 @@ skb_alloc:
if (virt_to_phys(qdf_nbuf_data(skb)) < 0x50000040) {
lowmem_alloc_tries++;
if (lowmem_alloc_tries > 100) {
qdf_err("Failed");
qdf_nofl_err("NBUF alloc failed %zuB @ %s:%d",
size, func, line);
return NULL;
} else {
/* Not freeing to make sure it
@@ -441,7 +429,8 @@ skb_alloc:
}
#else
struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve,
int align, int prio)
int align, int prio, const char *func,
uint32_t line)
{
struct sk_buff *skb;
unsigned long offset;
@@ -471,8 +460,8 @@ struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve,
skb = pld_nbuf_pre_alloc(size);
if (!skb) {
pr_err_ratelimited("ERROR:NBUF alloc failed, size = %zu\n",
size);
qdf_rl_nofl_err("NBUF alloc failed %zuB @ %s:%d",
size, func, line);
__qdf_nbuf_start_replenish_timer();
return NULL;
} else {
@@ -2619,7 +2608,7 @@ qdf_nbuf_t qdf_nbuf_alloc_debug(qdf_device_t osdev, qdf_size_t size,
{
qdf_nbuf_t nbuf;
nbuf = __qdf_nbuf_alloc(osdev, size, reserve, align, prio);
nbuf = __qdf_nbuf_alloc(osdev, size, reserve, align, prio, file, line);
/* Store SKB in internal QDF tracking table */
if (qdf_likely(nbuf)) {