qcacmn: Add checks in qdf_minidump_log
Add a check in qdf_minidump_log() and qdf_mindump_remove() so that log types that are not allowed for minidump are not added to the minidump table and also are not requested to be removed when they are not in the minidump. Change-Id: Id4cfdc0de1fc9baf40ae89ad5d3b3f9543df2805 CRs-Fixed: 3171812
This commit is contained in:

committed by
Madan Koyyalamudi

vanhempi
a8a385329d
commit
65dd63b576
@@ -486,13 +486,50 @@ __qdf_minidump_remove(void *addr, size_t size, const char *name)
|
||||
minidump_remove_segments((const uintptr_t)addr);
|
||||
}
|
||||
#elif defined(WLAN_QCOM_MINIDUMP)
|
||||
#define MAX_WLAN_MINIDUMP_ENTRIES 4
|
||||
|
||||
enum minidump_log_type {
|
||||
MD_HTC_CREDIT = 0,
|
||||
MD_WLAN_LOGS,
|
||||
MD_WMI_TX_CMP,
|
||||
MD_HAL_SOC,
|
||||
};
|
||||
|
||||
static const char *minidump_table[MAX_WLAN_MINIDUMP_ENTRIES];
|
||||
|
||||
static int qdf_get_name_idx(const char *name)
|
||||
{
|
||||
int i;
|
||||
static const char * const wlan_str[] = {
|
||||
[MD_HTC_CREDIT] = "htc_credit",
|
||||
[MD_WLAN_LOGS] = "wlan_logs",
|
||||
[MD_WMI_TX_CMP] = "wmi_tx_cmp",
|
||||
[MD_HAL_SOC] = "hal_soc"
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(wlan_str); i++) {
|
||||
if (strncmp(name, wlan_str[i], strlen(wlan_str[i])) == 0)
|
||||
return i;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void
|
||||
__qdf_minidump_log(void *start_addr, const size_t size,
|
||||
const char *name)
|
||||
{
|
||||
struct md_region md_entry;
|
||||
int ret;
|
||||
int ret, index;
|
||||
|
||||
index = qdf_get_name_idx(name);
|
||||
if (index < 0) {
|
||||
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_QDF,
|
||||
"%s: invalid entry %s\n",
|
||||
__func__, name);
|
||||
QDF_DEBUG_PANIC("Unknown minidump entry");
|
||||
return;
|
||||
}
|
||||
snprintf(md_entry.name, sizeof(md_entry.name), name);
|
||||
md_entry.virt_addr = (uintptr_t)start_addr;
|
||||
md_entry.phys_addr = virt_to_phys(start_addr);
|
||||
@@ -502,6 +539,9 @@ __qdf_minidump_log(void *start_addr, const size_t size,
|
||||
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_QDF,
|
||||
"%s: failed to log %pK (%s)\n",
|
||||
__func__, start_addr, name);
|
||||
minidump_table[index] = NULL;
|
||||
} else {
|
||||
minidump_table[index] = name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -510,12 +550,21 @@ __qdf_minidump_remove(void *start_addr, const size_t size,
|
||||
const char *name)
|
||||
{
|
||||
struct md_region md_entry;
|
||||
int index;
|
||||
|
||||
index = qdf_get_name_idx(name);
|
||||
if (index < 0 || !minidump_table[index]) {
|
||||
QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_QDF,
|
||||
"%s: entry was not added",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
snprintf(md_entry.name, sizeof(md_entry.name), name);
|
||||
md_entry.virt_addr = (uintptr_t)start_addr;
|
||||
md_entry.phys_addr = virt_to_phys(start_addr);
|
||||
md_entry.size = size;
|
||||
msm_minidump_remove_region(&md_entry);
|
||||
minidump_table[qdf_get_name_idx(name)] = NULL;
|
||||
}
|
||||
#else
|
||||
static inline void
|
||||
|
Viittaa uudesa ongelmassa
Block a user