From 20380cee21179ec9358074ed58d825aa6765e9b7 Mon Sep 17 00:00:00 2001 From: Aditya Kodukula Date: Thu, 14 Jan 2021 18:06:25 -0800 Subject: [PATCH] qcacmn: Add QDF infra for the minidump feature Add QDF infra for minidump feature and define the minidump_log and minidump_remove functions. Change-Id: I875b991b7a7d9295f8b2acd95a7551a747ec962c CRs-Fixed: 2856193 --- qdf/inc/qdf_trace.h | 12 ++++++---- qdf/linux/src/i_qdf_trace.h | 45 +++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index ab493c7ec6..8283dbf18b 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -1600,19 +1600,23 @@ int qdf_sprint_symbol(char *buffer, void *addr); * @name: String to identify this entry */ static inline -void qdf_minidump_log(void *start_addr, size_t size, const char *name) +void qdf_minidump_log(void *start_addr, + const size_t size, const char *name) { __qdf_minidump_log(start_addr, size, name); } /** * qdf_minidump_remove() - Remove memory address from minidump - * @addr: Start address of the memory previously added + * @start_addr: Start address of the memory previously added + * @size: Size in bytes + * @name: String to identify this entry */ static inline -void qdf_minidump_remove(void *addr) +void qdf_minidump_remove(void *start_addr, + const size_t size, const char *name) { - __qdf_minidump_remove(addr); + __qdf_minidump_remove(start_addr, size, name); } #endif /* __QDF_TRACE_H */ diff --git a/qdf/linux/src/i_qdf_trace.h b/qdf/linux/src/i_qdf_trace.h index a7b31f1e84..af1ee90479 100644 --- a/qdf/linux/src/i_qdf_trace.h +++ b/qdf/linux/src/i_qdf_trace.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -32,6 +32,9 @@ #ifdef CONFIG_QCA_MINIDUMP #include #endif +#ifdef CONFIG_QCOM_MINIDUMP +#include +#endif #if !defined(__printf) #define __printf(a, b) @@ -468,14 +471,48 @@ __qdf_minidump_log(void *start_addr, size_t size, const char *name) } static inline void -__qdf_minidump_remove(void *addr) +__qdf_minidump_remove(void *addr, size_t size, const char *name) { minidump_remove_segments((const uintptr_t)addr); } +#elif defined(CONFIG_QCOM_MINIDUMP) +static inline void +__qdf_minidump_log(void *start_addr, const size_t size, + const char *name) +{ + struct md_region md_entry; + int ret; + + 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; + ret = msm_minidump_add_region(&md_entry); + if (ret < 0) { + QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_QDF, + "%s: failed to log %pK (%s)\n", + __func__, start_addr, name); + } +} + +static inline void +__qdf_minidump_remove(void *start_addr, const size_t size, + const char *name) +{ + struct md_region md_entry; + + 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); +} #else static inline void -__qdf_minidump_log(void *start_addr, size_t size, const char *name) {} +__qdf_minidump_log(void *start_addr, + const size_t size, const char *name) {} static inline void -__qdf_minidump_remove(void *addr) {} +__qdf_minidump_remove(void *start_addr, + const size_t size, const char *name) {} #endif #endif /* __I_QDF_TRACE_H */