On Fri, 26 Apr 2019 at 14:58, Venkateswara Naralasetty <vnaralas@xxxxxxxxxxxxxx> wrote: > > 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. [...] > +/* 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) Did you consider using jump labels (see include/linux/jump_label.h)? It's what tracing uses under the hood. I wonder if you could squeeze out a bit more performance with that? I guess you'd need to add `struct static_key ath10k_dbg_mask_keys[ATH10K_DBG_MAX]` and re-do ath10k_debug_mask enum a bit. Michal