mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
ath10k: add device/driver strings to tracepoints
This makes it easier to log and debug via tracing with more than 1 ath10k device on a system. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
9e264945b8
commit
d35a6c18cb
@ -117,7 +117,7 @@ int ath10k_info(struct ath10k *ar, const char *fmt, ...)
|
|||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vaf.va = &args;
|
vaf.va = &args;
|
||||||
ret = dev_info(ar->dev, "%pV", &vaf);
|
ret = dev_info(ar->dev, "%pV", &vaf);
|
||||||
trace_ath10k_log_info(&vaf);
|
trace_ath10k_log_info(ar, &vaf);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -153,7 +153,7 @@ int ath10k_err(struct ath10k *ar, const char *fmt, ...)
|
|||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vaf.va = &args;
|
vaf.va = &args;
|
||||||
ret = dev_err(ar->dev, "%pV", &vaf);
|
ret = dev_err(ar->dev, "%pV", &vaf);
|
||||||
trace_ath10k_log_err(&vaf);
|
trace_ath10k_log_err(ar, &vaf);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -170,7 +170,7 @@ int ath10k_warn(struct ath10k *ar, const char *fmt, ...)
|
|||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vaf.va = &args;
|
vaf.va = &args;
|
||||||
dev_warn_ratelimited(ar->dev, "%pV", &vaf);
|
dev_warn_ratelimited(ar->dev, "%pV", &vaf);
|
||||||
trace_ath10k_log_warn(&vaf);
|
trace_ath10k_log_warn(ar, &vaf);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
@ -1223,7 +1223,7 @@ void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask,
|
|||||||
if (ath10k_debug_mask & mask)
|
if (ath10k_debug_mask & mask)
|
||||||
dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf);
|
dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf);
|
||||||
|
|
||||||
trace_ath10k_log_dbg(mask, &vaf);
|
trace_ath10k_log_dbg(ar, mask, &vaf);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
@ -1242,7 +1242,7 @@ void ath10k_dbg_dump(struct ath10k *ar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* tracing code doesn't like null strings :/ */
|
/* tracing code doesn't like null strings :/ */
|
||||||
trace_ath10k_log_dbg_dump(msg ? msg : "", prefix ? prefix : "",
|
trace_ath10k_log_dbg_dump(ar, msg ? msg : "", prefix ? prefix : "",
|
||||||
buf, len);
|
buf, len);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ath10k_dbg_dump);
|
EXPORT_SYMBOL(ath10k_dbg_dump);
|
||||||
|
@ -1654,7 +1654,7 @@ void ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
|
|||||||
/* FIX THIS */
|
/* FIX THIS */
|
||||||
break;
|
break;
|
||||||
case HTT_T2H_MSG_TYPE_STATS_CONF:
|
case HTT_T2H_MSG_TYPE_STATS_CONF:
|
||||||
trace_ath10k_htt_stats(skb->data, skb->len);
|
trace_ath10k_htt_stats(ar, skb->data, skb->len);
|
||||||
break;
|
break;
|
||||||
case HTT_T2H_MSG_TYPE_TX_INSPECT_IND:
|
case HTT_T2H_MSG_TYPE_TX_INSPECT_IND:
|
||||||
/* Firmware can return tx frames if it's unable to fully
|
/* Firmware can return tx frames if it's unable to fully
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
|
#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
|
||||||
|
|
||||||
#include <linux/tracepoint.h>
|
#include <linux/tracepoint.h>
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
#define _TRACE_H_
|
#define _TRACE_H_
|
||||||
|
|
||||||
@ -39,59 +40,79 @@ static inline void trace_ ## name(proto) {}
|
|||||||
#define ATH10K_MSG_MAX 200
|
#define ATH10K_MSG_MAX 200
|
||||||
|
|
||||||
DECLARE_EVENT_CLASS(ath10k_log_event,
|
DECLARE_EVENT_CLASS(ath10k_log_event,
|
||||||
TP_PROTO(struct va_format *vaf),
|
TP_PROTO(struct ath10k *ar, struct va_format *vaf),
|
||||||
TP_ARGS(vaf),
|
TP_ARGS(ar, vaf),
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__dynamic_array(char, msg, ATH10K_MSG_MAX)
|
__dynamic_array(char, msg, ATH10K_MSG_MAX)
|
||||||
),
|
),
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
|
WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
|
||||||
ATH10K_MSG_MAX,
|
ATH10K_MSG_MAX,
|
||||||
vaf->fmt,
|
vaf->fmt,
|
||||||
*vaf->va) >= ATH10K_MSG_MAX);
|
*vaf->va) >= ATH10K_MSG_MAX);
|
||||||
),
|
),
|
||||||
TP_printk("%s", __get_str(msg))
|
TP_printk(
|
||||||
|
"%s %s %s",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
|
__get_str(msg)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
|
DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
|
||||||
TP_PROTO(struct va_format *vaf),
|
TP_PROTO(struct ath10k *ar, struct va_format *vaf),
|
||||||
TP_ARGS(vaf)
|
TP_ARGS(ar, vaf)
|
||||||
);
|
);
|
||||||
|
|
||||||
DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
|
DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
|
||||||
TP_PROTO(struct va_format *vaf),
|
TP_PROTO(struct ath10k *ar, struct va_format *vaf),
|
||||||
TP_ARGS(vaf)
|
TP_ARGS(ar, vaf)
|
||||||
);
|
);
|
||||||
|
|
||||||
DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
|
DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
|
||||||
TP_PROTO(struct va_format *vaf),
|
TP_PROTO(struct ath10k *ar, struct va_format *vaf),
|
||||||
TP_ARGS(vaf)
|
TP_ARGS(ar, vaf)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_log_dbg,
|
TRACE_EVENT(ath10k_log_dbg,
|
||||||
TP_PROTO(unsigned int level, struct va_format *vaf),
|
TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
|
||||||
TP_ARGS(level, vaf),
|
TP_ARGS(ar, level, vaf),
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__field(unsigned int, level)
|
__field(unsigned int, level)
|
||||||
__dynamic_array(char, msg, ATH10K_MSG_MAX)
|
__dynamic_array(char, msg, ATH10K_MSG_MAX)
|
||||||
),
|
),
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__entry->level = level;
|
__entry->level = level;
|
||||||
WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
|
WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
|
||||||
ATH10K_MSG_MAX,
|
ATH10K_MSG_MAX,
|
||||||
vaf->fmt,
|
vaf->fmt,
|
||||||
*vaf->va) >= ATH10K_MSG_MAX);
|
*vaf->va) >= ATH10K_MSG_MAX);
|
||||||
),
|
),
|
||||||
TP_printk("%s", __get_str(msg))
|
TP_printk(
|
||||||
|
"%s %s %s",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
|
__get_str(msg)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_log_dbg_dump,
|
TRACE_EVENT(ath10k_log_dbg_dump,
|
||||||
TP_PROTO(const char *msg, const char *prefix,
|
TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
|
||||||
const void *buf, size_t buf_len),
|
const void *buf, size_t buf_len),
|
||||||
|
|
||||||
TP_ARGS(msg, prefix, buf, buf_len),
|
TP_ARGS(ar, msg, prefix, buf, buf_len),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__string(msg, msg)
|
__string(msg, msg)
|
||||||
__string(prefix, prefix)
|
__string(prefix, prefix)
|
||||||
__field(size_t, buf_len)
|
__field(size_t, buf_len)
|
||||||
@ -99,6 +120,8 @@ TRACE_EVENT(ath10k_log_dbg_dump,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__assign_str(msg, msg);
|
__assign_str(msg, msg);
|
||||||
__assign_str(prefix, prefix);
|
__assign_str(prefix, prefix);
|
||||||
__entry->buf_len = buf_len;
|
__entry->buf_len = buf_len;
|
||||||
@ -106,16 +129,22 @@ TRACE_EVENT(ath10k_log_dbg_dump,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"%s/%s\n", __get_str(prefix), __get_str(msg)
|
"%s %s %s/%s\n",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
|
__get_str(prefix),
|
||||||
|
__get_str(msg)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_wmi_cmd,
|
TRACE_EVENT(ath10k_wmi_cmd,
|
||||||
TP_PROTO(int id, void *buf, size_t buf_len, int ret),
|
TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret),
|
||||||
|
|
||||||
TP_ARGS(id, buf, buf_len, ret),
|
TP_ARGS(ar, id, buf, buf_len, ret),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__field(unsigned int, id)
|
__field(unsigned int, id)
|
||||||
__field(size_t, buf_len)
|
__field(size_t, buf_len)
|
||||||
__dynamic_array(u8, buf, buf_len)
|
__dynamic_array(u8, buf, buf_len)
|
||||||
@ -123,6 +152,8 @@ TRACE_EVENT(ath10k_wmi_cmd,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__entry->id = id;
|
__entry->id = id;
|
||||||
__entry->buf_len = buf_len;
|
__entry->buf_len = buf_len;
|
||||||
__entry->ret = ret;
|
__entry->ret = ret;
|
||||||
@ -130,7 +161,9 @@ TRACE_EVENT(ath10k_wmi_cmd,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"id %d len %zu ret %d",
|
"%s %s id %d len %zu ret %d",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
__entry->id,
|
__entry->id,
|
||||||
__entry->buf_len,
|
__entry->buf_len,
|
||||||
__entry->ret
|
__entry->ret
|
||||||
@ -138,67 +171,85 @@ TRACE_EVENT(ath10k_wmi_cmd,
|
|||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_wmi_event,
|
TRACE_EVENT(ath10k_wmi_event,
|
||||||
TP_PROTO(int id, void *buf, size_t buf_len),
|
TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len),
|
||||||
|
|
||||||
TP_ARGS(id, buf, buf_len),
|
TP_ARGS(ar, id, buf, buf_len),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__field(unsigned int, id)
|
__field(unsigned int, id)
|
||||||
__field(size_t, buf_len)
|
__field(size_t, buf_len)
|
||||||
__dynamic_array(u8, buf, buf_len)
|
__dynamic_array(u8, buf, buf_len)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__entry->id = id;
|
__entry->id = id;
|
||||||
__entry->buf_len = buf_len;
|
__entry->buf_len = buf_len;
|
||||||
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"id %d len %zu",
|
"%s %s id %d len %zu",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
__entry->id,
|
__entry->id,
|
||||||
__entry->buf_len
|
__entry->buf_len
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_htt_stats,
|
TRACE_EVENT(ath10k_htt_stats,
|
||||||
TP_PROTO(void *buf, size_t buf_len),
|
TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
|
||||||
|
|
||||||
TP_ARGS(buf, buf_len),
|
TP_ARGS(ar, buf, buf_len),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__field(size_t, buf_len)
|
__field(size_t, buf_len)
|
||||||
__dynamic_array(u8, buf, buf_len)
|
__dynamic_array(u8, buf, buf_len)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__entry->buf_len = buf_len;
|
__entry->buf_len = buf_len;
|
||||||
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"len %zu",
|
"%s %s len %zu",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
__entry->buf_len
|
__entry->buf_len
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ath10k_wmi_dbglog,
|
TRACE_EVENT(ath10k_wmi_dbglog,
|
||||||
TP_PROTO(void *buf, size_t buf_len),
|
TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
|
||||||
|
|
||||||
TP_ARGS(buf, buf_len),
|
TP_ARGS(ar, buf, buf_len),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__string(device, dev_name(ar->dev))
|
||||||
|
__string(driver, dev_driver_string(ar->dev))
|
||||||
__field(size_t, buf_len)
|
__field(size_t, buf_len)
|
||||||
__dynamic_array(u8, buf, buf_len)
|
__dynamic_array(u8, buf, buf_len)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__assign_str(device, dev_name(ar->dev));
|
||||||
|
__assign_str(driver, dev_driver_string(ar->dev));
|
||||||
__entry->buf_len = buf_len;
|
__entry->buf_len = buf_len;
|
||||||
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
memcpy(__get_dynamic_array(buf), buf, buf_len);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
"len %zu",
|
"%s %s len %zu",
|
||||||
|
__get_str(driver),
|
||||||
|
__get_str(device),
|
||||||
__entry->buf_len
|
__entry->buf_len
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -666,7 +666,7 @@ static int ath10k_wmi_cmd_send_nowait(struct ath10k *ar, struct sk_buff *skb,
|
|||||||
|
|
||||||
memset(skb_cb, 0, sizeof(*skb_cb));
|
memset(skb_cb, 0, sizeof(*skb_cb));
|
||||||
ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb);
|
ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb);
|
||||||
trace_ath10k_wmi_cmd(cmd_id, skb->data, skb->len, ret);
|
trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len, ret);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_pull;
|
goto err_pull;
|
||||||
@ -1288,7 +1288,7 @@ static int ath10k_wmi_event_debug_mesg(struct ath10k *ar, struct sk_buff *skb)
|
|||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n",
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n",
|
||||||
skb->len);
|
skb->len);
|
||||||
|
|
||||||
trace_ath10k_wmi_dbglog(skb->data, skb->len);
|
trace_ath10k_wmi_dbglog(ar, skb->data, skb->len);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2371,7 +2371,7 @@ static void ath10k_wmi_main_process_rx(struct ath10k *ar, struct sk_buff *skb)
|
|||||||
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
trace_ath10k_wmi_event(id, skb->data, skb->len);
|
trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case WMI_MGMT_RX_EVENTID:
|
case WMI_MGMT_RX_EVENTID:
|
||||||
@ -2487,7 +2487,7 @@ static void ath10k_wmi_10x_process_rx(struct ath10k *ar, struct sk_buff *skb)
|
|||||||
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
trace_ath10k_wmi_event(id, skb->data, skb->len);
|
trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case WMI_10X_MGMT_RX_EVENTID:
|
case WMI_10X_MGMT_RX_EVENTID:
|
||||||
@ -2594,7 +2594,7 @@ static void ath10k_wmi_10_2_process_rx(struct ath10k *ar, struct sk_buff *skb)
|
|||||||
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
trace_ath10k_wmi_event(id, skb->data, skb->len);
|
trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case WMI_10_2_MGMT_RX_EVENTID:
|
case WMI_10_2_MGMT_RX_EVENTID:
|
||||||
|
Loading…
Reference in New Issue
Block a user