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
此提交包含在:
@@ -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)) {
|
||||
|
新增問題並參考
封鎖使用者