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