Merge "qcacmn: Add logs in qdf_nbuf_alloc()"

This commit is contained in:
Linux Build Service Account
2018-09-06 10:04:01 -07:00
committed by Gerrit - the friendly Code Review server
8 changed files with 111 additions and 33 deletions

View File

@@ -741,6 +741,8 @@ void qdf_nbuf_unmap_nbytes_single_debug(qdf_device_t osdev,
#else /* NBUF_MEMORY_DEBUG */
static inline void qdf_nbuf_map_check_for_leaks(void) {}
static inline QDF_STATUS
qdf_nbuf_map(qdf_device_t osdev, qdf_nbuf_t buf, qdf_dma_dir_t dir)
{
@@ -1321,11 +1323,14 @@ static inline void qdf_net_buf_debug_release_skb(qdf_nbuf_t net_buf)
/* Nbuf allocation rouines */
#define qdf_nbuf_alloc(osdev, size, reserve, align, prio) \
qdf_nbuf_alloc_fl(osdev, size, reserve, align, prio, \
__func__, __LINE__)
static inline qdf_nbuf_t
qdf_nbuf_alloc(qdf_device_t osdev,
qdf_size_t size, int reserve, int align, int prio)
qdf_nbuf_alloc_fl(qdf_device_t osdev, qdf_size_t size, int reserve, int align,
int prio, const char *func, uint32_t line)
{
return __qdf_nbuf_alloc(osdev, size, reserve, align, prio);
return __qdf_nbuf_alloc(osdev, size, reserve, align, prio, func, line);
}
static inline void qdf_nbuf_free(qdf_nbuf_t buf)

View File

@@ -637,6 +637,23 @@ void qdf_vtrace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level,
#define qdf_nofl_debug(params...) \
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_alert(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_err(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_warn(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_info(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_debug(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_nofl_alert(params...) \
QDF_TRACE_FATAL_RL_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_nofl_err(params...) \
QDF_TRACE_ERROR_RL_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_nofl_warn(params...) \
QDF_TRACE_WARN_RL_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_nofl_info(params...) \
QDF_TRACE_INFO_RL_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_rl_nofl_debug(params...) \
QDF_TRACE_DEBUG_RL_NO_FL(QDF_MODULE_ID_QDF, ## params)
#define qdf_vprint __qdf_vprint
#define qdf_snprint __qdf_snprint

View File

@@ -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);

View File

@@ -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

View File

@@ -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)) {

View File

@@ -201,7 +201,18 @@ wmi_buf_t
wmi_buf_alloc_debug(wmi_unified_t wmi_handle, uint32_t len,
uint8_t *file_name, uint32_t line_num);
#else
wmi_buf_t wmi_buf_alloc(wmi_unified_t wmi_handle, uint32_t len);
/**
* wmi_buf_alloc() - generic function to allocate WMI buffer
* @wmi_handle: handle to WMI.
* @len: length of the buffer
*
* Return: return wmi_buf_t or null if memory alloc fails
*/
#define wmi_buf_alloc(wmi_handle, len) \
wmi_buf_alloc_fl(wmi_handle, len, __func__, __LINE__)
wmi_buf_t wmi_buf_alloc_fl(wmi_unified_t wmi_handle, uint32_t len,
const char *func, uint32_t line);
#endif
/**

View File

@@ -66,6 +66,23 @@
#define WMI_MGMT_EVENT_DEBUG_MAX_ENTRY (256)
#endif
#define wmi_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_WMI, ## params)
#define wmi_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_WMI, ## params)
#define wmi_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_WMI, ## params)
#define wmi_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_WMI, ## params)
#define wmi_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_WMI, ## params)
#define wmi_nofl_alert(params...) \
QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_WMI, ## params)
#define wmi_nofl_err(params...) \
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_WMI, ## params)
#define wmi_nofl_warn(params...) \
QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_WMI, ## params)
#define wmi_nofl_info(params...) \
QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_WMI, ## params)
#define wmi_nofl_debug(params...) \
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_WMI, ## params)
/**
* struct wmi_command_debug - WMI command log buffer data type
* @ command - Store WMI Command id

View File

@@ -1220,17 +1220,19 @@ void wmi_buf_free(wmi_buf_t net_buf)
}
qdf_export_symbol(wmi_buf_free);
#else
wmi_buf_t wmi_buf_alloc(wmi_unified_t wmi_handle, uint32_t len)
wmi_buf_t wmi_buf_alloc_fl(wmi_unified_t wmi_handle, uint32_t len,
const char *func, uint32_t line)
{
wmi_buf_t wmi_buf;
if (roundup(len + WMI_MIN_HEAD_ROOM, 4) > wmi_handle->max_msg_len) {
QDF_ASSERT(0);
wmi_nofl_err("%s:%d, Invalid len:%d", func, line, len);
QDF_DEBUG_PANIC();
return NULL;
}
wmi_buf = qdf_nbuf_alloc(NULL, roundup(len + WMI_MIN_HEAD_ROOM, 4),
WMI_MIN_HEAD_ROOM, 4, false);
wmi_buf = qdf_nbuf_alloc_fl(NULL, roundup(len + WMI_MIN_HEAD_ROOM, 4),
WMI_MIN_HEAD_ROOM, 4, false, func, line);
if (!wmi_buf)
return NULL;
@@ -1243,7 +1245,7 @@ wmi_buf_t wmi_buf_alloc(wmi_unified_t wmi_handle, uint32_t len)
qdf_nbuf_set_pktlen(wmi_buf, len);
return wmi_buf;
}
qdf_export_symbol(wmi_buf_alloc);
qdf_export_symbol(wmi_buf_alloc_fl);
void wmi_buf_free(wmi_buf_t net_buf)
{