aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2014-09-02 04:00:21 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2014-09-02 09:16:46 -0400
commitd35a6c18cb70be7961127f179a3394fe29a4ffe4 (patch)
treec739f18305c9723c872c0eb2572873b814945dc8
parent9e264945b8959f9e95fef162ae9c2fe0ec22f909 (diff)
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>
-rw-r--r--drivers/net/wireless/ath/ath10k/debug.c10
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_rx.c2
-rw-r--r--drivers/net/wireless/ath/ath10k/trace.h105
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c10
4 files changed, 89 insertions, 38 deletions
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index f3f0a80f8bab..d922ef457498 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -117,7 +117,7 @@ int ath10k_info(struct ath10k *ar, const char *fmt, ...)
117 va_start(args, fmt); 117 va_start(args, fmt);
118 vaf.va = &args; 118 vaf.va = &args;
119 ret = dev_info(ar->dev, "%pV", &vaf); 119 ret = dev_info(ar->dev, "%pV", &vaf);
120 trace_ath10k_log_info(&vaf); 120 trace_ath10k_log_info(ar, &vaf);
121 va_end(args); 121 va_end(args);
122 122
123 return ret; 123 return ret;
@@ -153,7 +153,7 @@ int ath10k_err(struct ath10k *ar, const char *fmt, ...)
153 va_start(args, fmt); 153 va_start(args, fmt);
154 vaf.va = &args; 154 vaf.va = &args;
155 ret = dev_err(ar->dev, "%pV", &vaf); 155 ret = dev_err(ar->dev, "%pV", &vaf);
156 trace_ath10k_log_err(&vaf); 156 trace_ath10k_log_err(ar, &vaf);
157 va_end(args); 157 va_end(args);
158 158
159 return ret; 159 return ret;
@@ -170,7 +170,7 @@ int ath10k_warn(struct ath10k *ar, const char *fmt, ...)
170 va_start(args, fmt); 170 va_start(args, fmt);
171 vaf.va = &args; 171 vaf.va = &args;
172 dev_warn_ratelimited(ar->dev, "%pV", &vaf); 172 dev_warn_ratelimited(ar->dev, "%pV", &vaf);
173 trace_ath10k_log_warn(&vaf); 173 trace_ath10k_log_warn(ar, &vaf);
174 174
175 va_end(args); 175 va_end(args);
176 176
@@ -1223,7 +1223,7 @@ void ath10k_dbg(struct ath10k *ar, enum ath10k_debug_mask mask,
1223 if (ath10k_debug_mask & mask) 1223 if (ath10k_debug_mask & mask)
1224 dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf); 1224 dev_printk(KERN_DEBUG, ar->dev, "%pV", &vaf);
1225 1225
1226 trace_ath10k_log_dbg(mask, &vaf); 1226 trace_ath10k_log_dbg(ar, mask, &vaf);
1227 1227
1228 va_end(args); 1228 va_end(args);
1229} 1229}
@@ -1242,7 +1242,7 @@ void ath10k_dbg_dump(struct ath10k *ar,
1242 } 1242 }
1243 1243
1244 /* tracing code doesn't like null strings :/ */ 1244 /* tracing code doesn't like null strings :/ */
1245 trace_ath10k_log_dbg_dump(msg ? msg : "", prefix ? prefix : "", 1245 trace_ath10k_log_dbg_dump(ar, msg ? msg : "", prefix ? prefix : "",
1246 buf, len); 1246 buf, len);
1247} 1247}
1248EXPORT_SYMBOL(ath10k_dbg_dump); 1248EXPORT_SYMBOL(ath10k_dbg_dump);
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 30927b1d7109..57e1fe77602b 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -1654,7 +1654,7 @@ void ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
1654 /* FIX THIS */ 1654 /* FIX THIS */
1655 break; 1655 break;
1656 case HTT_T2H_MSG_TYPE_STATS_CONF: 1656 case HTT_T2H_MSG_TYPE_STATS_CONF:
1657 trace_ath10k_htt_stats(skb->data, skb->len); 1657 trace_ath10k_htt_stats(ar, skb->data, skb->len);
1658 break; 1658 break;
1659 case HTT_T2H_MSG_TYPE_TX_INSPECT_IND: 1659 case HTT_T2H_MSG_TYPE_TX_INSPECT_IND:
1660 /* Firmware can return tx frames if it's unable to fully 1660 /* Firmware can return tx frames if it's unable to fully
diff --git a/drivers/net/wireless/ath/ath10k/trace.h b/drivers/net/wireless/ath/ath10k/trace.h
index 4eb2ecbc06ef..574b75ab2609 100644
--- a/drivers/net/wireless/ath/ath10k/trace.h
+++ b/drivers/net/wireless/ath/ath10k/trace.h
@@ -18,6 +18,7 @@
18#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 18#if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
19 19
20#include <linux/tracepoint.h> 20#include <linux/tracepoint.h>
21#include "core.h"
21 22
22#define _TRACE_H_ 23#define _TRACE_H_
23 24
@@ -39,59 +40,79 @@ static inline void trace_ ## name(proto) {}
39#define ATH10K_MSG_MAX 200 40#define ATH10K_MSG_MAX 200
40 41
41DECLARE_EVENT_CLASS(ath10k_log_event, 42DECLARE_EVENT_CLASS(ath10k_log_event,
42 TP_PROTO(struct va_format *vaf), 43 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
43 TP_ARGS(vaf), 44 TP_ARGS(ar, vaf),
44 TP_STRUCT__entry( 45 TP_STRUCT__entry(
46 __string(device, dev_name(ar->dev))
47 __string(driver, dev_driver_string(ar->dev))
45 __dynamic_array(char, msg, ATH10K_MSG_MAX) 48 __dynamic_array(char, msg, ATH10K_MSG_MAX)
46 ), 49 ),
47 TP_fast_assign( 50 TP_fast_assign(
51 __assign_str(device, dev_name(ar->dev));
52 __assign_str(driver, dev_driver_string(ar->dev));
48 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 53 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
49 ATH10K_MSG_MAX, 54 ATH10K_MSG_MAX,
50 vaf->fmt, 55 vaf->fmt,
51 *vaf->va) >= ATH10K_MSG_MAX); 56 *vaf->va) >= ATH10K_MSG_MAX);
52 ), 57 ),
53 TP_printk("%s", __get_str(msg)) 58 TP_printk(
59 "%s %s %s",
60 __get_str(driver),
61 __get_str(device),
62 __get_str(msg)
63 )
54); 64);
55 65
56DEFINE_EVENT(ath10k_log_event, ath10k_log_err, 66DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
57 TP_PROTO(struct va_format *vaf), 67 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
58 TP_ARGS(vaf) 68 TP_ARGS(ar, vaf)
59); 69);
60 70
61DEFINE_EVENT(ath10k_log_event, ath10k_log_warn, 71DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
62 TP_PROTO(struct va_format *vaf), 72 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
63 TP_ARGS(vaf) 73 TP_ARGS(ar, vaf)
64); 74);
65 75
66DEFINE_EVENT(ath10k_log_event, ath10k_log_info, 76DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
67 TP_PROTO(struct va_format *vaf), 77 TP_PROTO(struct ath10k *ar, struct va_format *vaf),
68 TP_ARGS(vaf) 78 TP_ARGS(ar, vaf)
69); 79);
70 80
71TRACE_EVENT(ath10k_log_dbg, 81TRACE_EVENT(ath10k_log_dbg,
72 TP_PROTO(unsigned int level, struct va_format *vaf), 82 TP_PROTO(struct ath10k *ar, unsigned int level, struct va_format *vaf),
73 TP_ARGS(level, vaf), 83 TP_ARGS(ar, level, vaf),
74 TP_STRUCT__entry( 84 TP_STRUCT__entry(
85 __string(device, dev_name(ar->dev))
86 __string(driver, dev_driver_string(ar->dev))
75 __field(unsigned int, level) 87 __field(unsigned int, level)
76 __dynamic_array(char, msg, ATH10K_MSG_MAX) 88 __dynamic_array(char, msg, ATH10K_MSG_MAX)
77 ), 89 ),
78 TP_fast_assign( 90 TP_fast_assign(
91 __assign_str(device, dev_name(ar->dev));
92 __assign_str(driver, dev_driver_string(ar->dev));
79 __entry->level = level; 93 __entry->level = level;
80 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg), 94 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
81 ATH10K_MSG_MAX, 95 ATH10K_MSG_MAX,
82 vaf->fmt, 96 vaf->fmt,
83 *vaf->va) >= ATH10K_MSG_MAX); 97 *vaf->va) >= ATH10K_MSG_MAX);
84 ), 98 ),
85 TP_printk("%s", __get_str(msg)) 99 TP_printk(
100 "%s %s %s",
101 __get_str(driver),
102 __get_str(device),
103 __get_str(msg)
104 )
86); 105);
87 106
88TRACE_EVENT(ath10k_log_dbg_dump, 107TRACE_EVENT(ath10k_log_dbg_dump,
89 TP_PROTO(const char *msg, const char *prefix, 108 TP_PROTO(struct ath10k *ar, const char *msg, const char *prefix,
90 const void *buf, size_t buf_len), 109 const void *buf, size_t buf_len),
91 110
92 TP_ARGS(msg, prefix, buf, buf_len), 111 TP_ARGS(ar, msg, prefix, buf, buf_len),
93 112
94 TP_STRUCT__entry( 113 TP_STRUCT__entry(
114 __string(device, dev_name(ar->dev))
115 __string(driver, dev_driver_string(ar->dev))
95 __string(msg, msg) 116 __string(msg, msg)
96 __string(prefix, prefix) 117 __string(prefix, prefix)
97 __field(size_t, buf_len) 118 __field(size_t, buf_len)
@@ -99,6 +120,8 @@ TRACE_EVENT(ath10k_log_dbg_dump,
99 ), 120 ),
100 121
101 TP_fast_assign( 122 TP_fast_assign(
123 __assign_str(device, dev_name(ar->dev));
124 __assign_str(driver, dev_driver_string(ar->dev));
102 __assign_str(msg, msg); 125 __assign_str(msg, msg);
103 __assign_str(prefix, prefix); 126 __assign_str(prefix, prefix);
104 __entry->buf_len = buf_len; 127 __entry->buf_len = buf_len;
@@ -106,16 +129,22 @@ TRACE_EVENT(ath10k_log_dbg_dump,
106 ), 129 ),
107 130
108 TP_printk( 131 TP_printk(
109 "%s/%s\n", __get_str(prefix), __get_str(msg) 132 "%s %s %s/%s\n",
133 __get_str(driver),
134 __get_str(device),
135 __get_str(prefix),
136 __get_str(msg)
110 ) 137 )
111); 138);
112 139
113TRACE_EVENT(ath10k_wmi_cmd, 140TRACE_EVENT(ath10k_wmi_cmd,
114 TP_PROTO(int id, void *buf, size_t buf_len, int ret), 141 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len, int ret),
115 142
116 TP_ARGS(id, buf, buf_len, ret), 143 TP_ARGS(ar, id, buf, buf_len, ret),
117 144
118 TP_STRUCT__entry( 145 TP_STRUCT__entry(
146 __string(device, dev_name(ar->dev))
147 __string(driver, dev_driver_string(ar->dev))
119 __field(unsigned int, id) 148 __field(unsigned int, id)
120 __field(size_t, buf_len) 149 __field(size_t, buf_len)
121 __dynamic_array(u8, buf, buf_len) 150 __dynamic_array(u8, buf, buf_len)
@@ -123,6 +152,8 @@ TRACE_EVENT(ath10k_wmi_cmd,
123 ), 152 ),
124 153
125 TP_fast_assign( 154 TP_fast_assign(
155 __assign_str(device, dev_name(ar->dev));
156 __assign_str(driver, dev_driver_string(ar->dev));
126 __entry->id = id; 157 __entry->id = id;
127 __entry->buf_len = buf_len; 158 __entry->buf_len = buf_len;
128 __entry->ret = ret; 159 __entry->ret = ret;
@@ -130,7 +161,9 @@ TRACE_EVENT(ath10k_wmi_cmd,
130 ), 161 ),
131 162
132 TP_printk( 163 TP_printk(
133 "id %d len %zu ret %d", 164 "%s %s id %d len %zu ret %d",
165 __get_str(driver),
166 __get_str(device),
134 __entry->id, 167 __entry->id,
135 __entry->buf_len, 168 __entry->buf_len,
136 __entry->ret 169 __entry->ret
@@ -138,67 +171,85 @@ TRACE_EVENT(ath10k_wmi_cmd,
138); 171);
139 172
140TRACE_EVENT(ath10k_wmi_event, 173TRACE_EVENT(ath10k_wmi_event,
141 TP_PROTO(int id, void *buf, size_t buf_len), 174 TP_PROTO(struct ath10k *ar, int id, void *buf, size_t buf_len),
142 175
143 TP_ARGS(id, buf, buf_len), 176 TP_ARGS(ar, id, buf, buf_len),
144 177
145 TP_STRUCT__entry( 178 TP_STRUCT__entry(
179 __string(device, dev_name(ar->dev))
180 __string(driver, dev_driver_string(ar->dev))
146 __field(unsigned int, id) 181 __field(unsigned int, id)
147 __field(size_t, buf_len) 182 __field(size_t, buf_len)
148 __dynamic_array(u8, buf, buf_len) 183 __dynamic_array(u8, buf, buf_len)
149 ), 184 ),
150 185
151 TP_fast_assign( 186 TP_fast_assign(
187 __assign_str(device, dev_name(ar->dev));
188 __assign_str(driver, dev_driver_string(ar->dev));
152 __entry->id = id; 189 __entry->id = id;
153 __entry->buf_len = buf_len; 190 __entry->buf_len = buf_len;
154 memcpy(__get_dynamic_array(buf), buf, buf_len); 191 memcpy(__get_dynamic_array(buf), buf, buf_len);
155 ), 192 ),
156 193
157 TP_printk( 194 TP_printk(
158 "id %d len %zu", 195 "%s %s id %d len %zu",
196 __get_str(driver),
197 __get_str(device),
159 __entry->id, 198 __entry->id,
160 __entry->buf_len 199 __entry->buf_len
161 ) 200 )
162); 201);
163 202
164TRACE_EVENT(ath10k_htt_stats, 203TRACE_EVENT(ath10k_htt_stats,
165 TP_PROTO(void *buf, size_t buf_len), 204 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
166 205
167 TP_ARGS(buf, buf_len), 206 TP_ARGS(ar, buf, buf_len),
168 207
169 TP_STRUCT__entry( 208 TP_STRUCT__entry(
209 __string(device, dev_name(ar->dev))
210 __string(driver, dev_driver_string(ar->dev))
170 __field(size_t, buf_len) 211 __field(size_t, buf_len)
171 __dynamic_array(u8, buf, buf_len) 212 __dynamic_array(u8, buf, buf_len)
172 ), 213 ),
173 214
174 TP_fast_assign( 215 TP_fast_assign(
216 __assign_str(device, dev_name(ar->dev));
217 __assign_str(driver, dev_driver_string(ar->dev));
175 __entry->buf_len = buf_len; 218 __entry->buf_len = buf_len;
176 memcpy(__get_dynamic_array(buf), buf, buf_len); 219 memcpy(__get_dynamic_array(buf), buf, buf_len);
177 ), 220 ),
178 221
179 TP_printk( 222 TP_printk(
180 "len %zu", 223 "%s %s len %zu",
224 __get_str(driver),
225 __get_str(device),
181 __entry->buf_len 226 __entry->buf_len
182 ) 227 )
183); 228);
184 229
185TRACE_EVENT(ath10k_wmi_dbglog, 230TRACE_EVENT(ath10k_wmi_dbglog,
186 TP_PROTO(void *buf, size_t buf_len), 231 TP_PROTO(struct ath10k *ar, void *buf, size_t buf_len),
187 232
188 TP_ARGS(buf, buf_len), 233 TP_ARGS(ar, buf, buf_len),
189 234
190 TP_STRUCT__entry( 235 TP_STRUCT__entry(
236 __string(device, dev_name(ar->dev))
237 __string(driver, dev_driver_string(ar->dev))
191 __field(size_t, buf_len) 238 __field(size_t, buf_len)
192 __dynamic_array(u8, buf, buf_len) 239 __dynamic_array(u8, buf, buf_len)
193 ), 240 ),
194 241
195 TP_fast_assign( 242 TP_fast_assign(
243 __assign_str(device, dev_name(ar->dev));
244 __assign_str(driver, dev_driver_string(ar->dev));
196 __entry->buf_len = buf_len; 245 __entry->buf_len = buf_len;
197 memcpy(__get_dynamic_array(buf), buf, buf_len); 246 memcpy(__get_dynamic_array(buf), buf, buf_len);
198 ), 247 ),
199 248
200 TP_printk( 249 TP_printk(
201 "len %zu", 250 "%s %s len %zu",
251 __get_str(driver),
252 __get_str(device),
202 __entry->buf_len 253 __entry->buf_len
203 ) 254 )
204); 255);
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index e500a3cc905e..b13ccf6778c3 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -666,7 +666,7 @@ static int ath10k_wmi_cmd_send_nowait(struct ath10k *ar, struct sk_buff *skb,
666 666
667 memset(skb_cb, 0, sizeof(*skb_cb)); 667 memset(skb_cb, 0, sizeof(*skb_cb));
668 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb); 668 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb);
669 trace_ath10k_wmi_cmd(cmd_id, skb->data, skb->len, ret); 669 trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len, ret);
670 670
671 if (ret) 671 if (ret)
672 goto err_pull; 672 goto err_pull;
@@ -1288,7 +1288,7 @@ static int ath10k_wmi_event_debug_mesg(struct ath10k *ar, struct sk_buff *skb)
1288 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n", 1288 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n",
1289 skb->len); 1289 skb->len);
1290 1290
1291 trace_ath10k_wmi_dbglog(skb->data, skb->len); 1291 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len);
1292 1292
1293 return 0; 1293 return 0;
1294} 1294}
@@ -2371,7 +2371,7 @@ static void ath10k_wmi_main_process_rx(struct ath10k *ar, struct sk_buff *skb)
2371 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL) 2371 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
2372 return; 2372 return;
2373 2373
2374 trace_ath10k_wmi_event(id, skb->data, skb->len); 2374 trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
2375 2375
2376 switch (id) { 2376 switch (id) {
2377 case WMI_MGMT_RX_EVENTID: 2377 case WMI_MGMT_RX_EVENTID:
@@ -2487,7 +2487,7 @@ static void ath10k_wmi_10x_process_rx(struct ath10k *ar, struct sk_buff *skb)
2487 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL) 2487 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
2488 return; 2488 return;
2489 2489
2490 trace_ath10k_wmi_event(id, skb->data, skb->len); 2490 trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
2491 2491
2492 switch (id) { 2492 switch (id) {
2493 case WMI_10X_MGMT_RX_EVENTID: 2493 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)
2594 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL) 2594 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
2595 return; 2595 return;
2596 2596
2597 trace_ath10k_wmi_event(id, skb->data, skb->len); 2597 trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
2598 2598
2599 switch (id) { 2599 switch (id) {
2600 case WMI_10_2_MGMT_RX_EVENTID: 2600 case WMI_10_2_MGMT_RX_EVENTID: