qcacmn: Allocate MAC Trace buffer dynamically

Allocate memory for g_qdf_trace_tbl buffer dynamically.

Change-Id: I5e9ba0a33e220ead36e0775f00000346aae68373
CRs-Fixed: 2267922
This commit is contained in:
Rachit Kankane
2018-06-26 19:20:05 +05:30
committed by nshrivas
parent a0c640b5fb
commit 371fce287d
2 changed files with 59 additions and 2 deletions

View File

@@ -503,6 +503,7 @@ static inline void qdf_register_debugcb_init(void)
#ifdef TRACE_RECORD
void qdf_trace_register(QDF_MODULE_ID, tp_qdf_trace_cb);
void qdf_trace_init(void);
void qdf_trace_deinit(void);
void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data);
void qdf_trace_enable(uint32_t, uint8_t enable);
void qdf_trace_dump_all(void *, uint8_t, uint8_t, uint32_t, uint32_t);
@@ -514,6 +515,11 @@ void qdf_trace_init(void)
{
}
static inline
void qdf_trace_deinit(void)
{
}
static inline
void qdf_trace_enable(uint32_t bitmask_of_module_id, uint8_t enable)
{

View File

@@ -88,8 +88,6 @@ module_trace_info g_qdf_trace_info[QDF_MODULE_ID_MAX] = {
#ifdef TRACE_RECORD
/* Static and Global variables */
static spinlock_t ltrace_lock;
static qdf_trace_record_t g_qdf_trace_tbl[MAX_QDF_TRACE_RECORDS];
/* global qdf trace data */
static t_qdf_trace_data g_qdf_trace_data;
/*
@@ -102,6 +100,13 @@ static t_qdf_trace_data g_qdf_trace_data;
*/
static tp_qdf_trace_cb qdf_trace_cb_table[QDF_MODULE_ID_MAX];
static tp_qdf_trace_cb qdf_trace_restore_cb_table[QDF_MODULE_ID_MAX];
#ifdef WLAN_LOGGING_BUFFERS_DYNAMICALLY
static qdf_trace_record_t *g_qdf_trace_tbl;
#else
static qdf_trace_record_t g_qdf_trace_tbl[MAX_QDF_TRACE_RECORDS];
#endif
#endif
#ifdef WLAN_FEATURE_MEMDUMP_ENABLE
@@ -376,6 +381,30 @@ qdf_export_symbol(qdf_trace_hex_dump);
#endif
#ifdef TRACE_RECORD
#ifdef WLAN_LOGGING_BUFFERS_DYNAMICALLY
static inline QDF_STATUS allocate_g_qdf_trace_tbl_buffer(void)
{
g_qdf_trace_tbl = vzalloc(MAX_QDF_TRACE_RECORDS *
sizeof(*g_qdf_trace_tbl));
QDF_BUG(g_qdf_trace_tbl);
return g_qdf_trace_tbl ? QDF_STATUS_SUCCESS : QDF_STATUS_E_NOMEM;
}
static inline void free_g_qdf_trace_tbl_buffer(void)
{
vfree(g_qdf_trace_tbl);
g_qdf_trace_tbl = NULL;
}
#else
static inline QDF_STATUS allocate_g_qdf_trace_tbl_buffer(void)
{
return QDF_STATUS_SUCCESS;
}
static inline void free_g_qdf_trace_tbl_buffer(void)
{ }
#endif
/**
* qdf_trace_enable() - Enable MTRACE for specific modules
* @bitmask_of_module_id: Bitmask according to enum of the modules.
@@ -446,6 +475,8 @@ void qdf_trace_init(void)
{
uint8_t i;
if (allocate_g_qdf_trace_tbl_buffer() != QDF_STATUS_SUCCESS)
return;
g_qdf_trace_data.head = INVALID_QDF_TRACE_ADDR;
g_qdf_trace_data.tail = INVALID_QDF_TRACE_ADDR;
g_qdf_trace_data.num = 0;
@@ -460,6 +491,26 @@ void qdf_trace_init(void)
}
qdf_export_symbol(qdf_trace_init);
/**
* qdf_trace_deinit() - frees memory allocated dynamically
*
* Called from cds_deinit, so that we can free the memory and resets
* the variables
*
* Return: None
*/
void qdf_trace_deinit(void)
{
g_qdf_trace_data.enable = false;
g_qdf_trace_data.num = 0;
g_qdf_trace_data.head = INVALID_QDF_TRACE_ADDR;
g_qdf_trace_data.tail = INVALID_QDF_TRACE_ADDR;
free_g_qdf_trace_tbl_buffer();
}
qdf_export_symbol(qdf_trace_deinit);
/**
* qdf_trace() - puts the messages in to ring-buffer
* @module: Enum of module, basically module id.