ath10k: Add wrapper function to ath10k debug
ath10k_dbg() is called in ath10k_process_rx() with huge set of arguments which is causing CPU overhead even when debug_mask is not set. Good improvement was observed in the receive side performance when call to ath10k_dbg() is avoided in the RX path. Since currently all debug messages are sent via tracing infrastructure, we cannot entirely avoid calling ath10k_dbg. Therefore, call to ath10k_dbg() is made conditional based on tracing config in the driver. Trasmit performance remains unchanged with this patch; below are some experimental results with this patch and tracing disabled. mesh mode: w/o this patch with this patch Traffic TP CPU Usage TP CPU usage TCP 840Mbps 76.53% 960Mbps 78.14% UDP 1030Mbps 74.58% 1132Mbps 74.31% Infra mode: w/o this patch with this patch Traffic TP CPU Usage TP CPU usage TCP Rx 1241Mbps 80.89% 1270Mbps 73.50% UDP Rx 1433Mbps 81.77% 1472Mbps 72.80% Tested platform : IPQ8064 hardware used : QCA9984 firmware ver : ver 10.4-3.5.3-00057 Signed-off-by: Kan Yan <kyan@chromium.org> Signed-off-by: Venkateswara Naralasetty <vnaralas@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
bc31c2cfec
commit
9d740d6380
|
@ -26,6 +26,8 @@
|
||||||
#include "coredump.h"
|
#include "coredump.h"
|
||||||
|
|
||||||
unsigned int ath10k_debug_mask;
|
unsigned int ath10k_debug_mask;
|
||||||
|
EXPORT_SYMBOL(ath10k_debug_mask);
|
||||||
|
|
||||||
static unsigned int ath10k_cryptmode_param;
|
static unsigned int ath10k_cryptmode_param;
|
||||||
static bool uart_print;
|
static bool uart_print;
|
||||||
static bool skip_otp;
|
static bool skip_otp;
|
||||||
|
|
|
@ -2664,8 +2664,8 @@ void ath10k_debug_unregister(struct ath10k *ar)
|
||||||
#endif /* CONFIG_ATH10K_DEBUGFS */
|
#endif /* CONFIG_ATH10K_DEBUGFS */
|
||||||
|
|
||||||
#ifdef CONFIG_ATH10K_DEBUG
|
#ifdef CONFIG_ATH10K_DEBUG
|
||||||
void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask,
|
void __ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
struct va_format vaf;
|
struct va_format vaf;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -2682,7 +2682,7 @@ void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask,
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ath10k_dbg);
|
EXPORT_SYMBOL(__ath10k_dbg);
|
||||||
|
|
||||||
void ath10k_dbg_dump(struct ath10k *ar,
|
void ath10k_dbg_dump(struct ath10k *ar,
|
||||||
enum ath10k_debug_mask mask,
|
enum ath10k_debug_mask mask,
|
||||||
|
@ -2695,7 +2695,7 @@ void ath10k_dbg_dump(struct ath10k *ar,
|
||||||
|
|
||||||
if (ath10k_debug_mask & mask) {
|
if (ath10k_debug_mask & mask) {
|
||||||
if (msg)
|
if (msg)
|
||||||
ath10k_dbg(ar, mask, "%s\n", msg);
|
__ath10k_dbg(ar, mask, "%s\n", msg);
|
||||||
|
|
||||||
for (ptr = buf; (ptr - buf) < len; ptr += 16) {
|
for (ptr = buf; (ptr - buf) < len; ptr += 16) {
|
||||||
linebuflen = 0;
|
linebuflen = 0;
|
||||||
|
|
|
@ -240,18 +240,18 @@ void ath10k_sta_update_rx_tid_stats_ampdu(struct ath10k *ar,
|
||||||
#endif /* CONFIG_MAC80211_DEBUGFS */
|
#endif /* CONFIG_MAC80211_DEBUGFS */
|
||||||
|
|
||||||
#ifdef CONFIG_ATH10K_DEBUG
|
#ifdef CONFIG_ATH10K_DEBUG
|
||||||
__printf(3, 4) void ath10k_dbg(struct ath10k *ar,
|
__printf(3, 4) void __ath10k_dbg(struct ath10k *ar,
|
||||||
enum ath10k_debug_mask mask,
|
enum ath10k_debug_mask mask,
|
||||||
const char *fmt, ...);
|
const char *fmt, ...);
|
||||||
void ath10k_dbg_dump(struct ath10k *ar,
|
void ath10k_dbg_dump(struct ath10k *ar,
|
||||||
enum ath10k_debug_mask mask,
|
enum ath10k_debug_mask mask,
|
||||||
const char *msg, const char *prefix,
|
const char *msg, const char *prefix,
|
||||||
const void *buf, size_t len);
|
const void *buf, size_t len);
|
||||||
#else /* CONFIG_ATH10K_DEBUG */
|
#else /* CONFIG_ATH10K_DEBUG */
|
||||||
|
|
||||||
static inline int ath10k_dbg(struct ath10k *ar,
|
static inline int __ath10k_dbg(struct ath10k *ar,
|
||||||
enum ath10k_debug_mask dbg_mask,
|
enum ath10k_debug_mask dbg_mask,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -263,4 +263,14 @@ static inline void ath10k_dbg_dump(struct ath10k *ar,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_ATH10K_DEBUG */
|
#endif /* CONFIG_ATH10K_DEBUG */
|
||||||
|
|
||||||
|
/* Avoid calling __ath10k_dbg() if debug_mask is not set and tracing
|
||||||
|
* disabled.
|
||||||
|
*/
|
||||||
|
#define ath10k_dbg(ar, dbg_mask, fmt, ...) \
|
||||||
|
do { \
|
||||||
|
if ((ath10k_debug_mask & dbg_mask) || \
|
||||||
|
trace_ath10k_log_dbg_enabled()) \
|
||||||
|
__ath10k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
#endif /* _DEBUG_H_ */
|
#endif /* _DEBUG_H_ */
|
||||||
|
|
|
@ -7,3 +7,4 @@
|
||||||
|
|
||||||
#define CREATE_TRACE_POINTS
|
#define CREATE_TRACE_POINTS
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
EXPORT_SYMBOL(__tracepoint_ath10k_log_dbg);
|
||||||
|
|
|
@ -29,7 +29,11 @@ static inline u32 ath10k_frm_hdr_len(const void *buf, size_t len)
|
||||||
#if !defined(CONFIG_ATH10K_TRACING)
|
#if !defined(CONFIG_ATH10K_TRACING)
|
||||||
#undef TRACE_EVENT
|
#undef TRACE_EVENT
|
||||||
#define TRACE_EVENT(name, proto, ...) \
|
#define TRACE_EVENT(name, proto, ...) \
|
||||||
static inline void trace_ ## name(proto) {}
|
static inline void trace_ ## name(proto) {} \
|
||||||
|
static inline bool trace_##name##_enabled(void) \
|
||||||
|
{ \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
#undef DECLARE_EVENT_CLASS
|
#undef DECLARE_EVENT_CLASS
|
||||||
#define DECLARE_EVENT_CLASS(...)
|
#define DECLARE_EVENT_CLASS(...)
|
||||||
#undef DEFINE_EVENT
|
#undef DEFINE_EVENT
|
||||||
|
|
Loading…
Reference in New Issue