diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-08-17 10:16:53 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-20 11:35:58 -0400 |
commit | 3ac64beecd27400d12cc7afb4108eef26c499f6a (patch) | |
tree | da0220085f68e30fe61ba9b8833dc6311d6dc25e /net/mac80211/driver-trace.h | |
parent | ea416a793d2b611f22b42ba094fd2e5bd30fff43 (diff) |
mac80211: allow configure_filter callback to sleep
Over time, a whole bunch of drivers have come up
with their own scheme to delay the configure_filter
operation to a workqueue. To be able to simplify
things, allow configure_filter to sleep, and add
a new prepare_multicast callback that drivers that
need the multicast address list implement. This new
callback must be atomic, but most drivers either
don't care or just calculate a hash which can be
done atomically and then uploaded to the hardware
non-atomically.
A cursory look suggests that at76c50x-usb, ar9170,
mwl8k (which is actually very broken now), rt2x00,
wl1251, wl1271 and zd1211 should make use of this
new capability.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/driver-trace.h')
-rw-r--r-- | net/mac80211/driver-trace.h | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/net/mac80211/driver-trace.h b/net/mac80211/driver-trace.h index 5a10da2d70fd..37b9051afcf3 100644 --- a/net/mac80211/driver-trace.h +++ b/net/mac80211/driver-trace.h | |||
@@ -191,31 +191,55 @@ TRACE_EVENT(drv_bss_info_changed, | |||
191 | ) | 191 | ) |
192 | ); | 192 | ); |
193 | 193 | ||
194 | TRACE_EVENT(drv_prepare_multicast, | ||
195 | TP_PROTO(struct ieee80211_local *local, int mc_count, u64 ret), | ||
196 | |||
197 | TP_ARGS(local, mc_count, ret), | ||
198 | |||
199 | TP_STRUCT__entry( | ||
200 | LOCAL_ENTRY | ||
201 | __field(int, mc_count) | ||
202 | __field(u64, ret) | ||
203 | ), | ||
204 | |||
205 | TP_fast_assign( | ||
206 | LOCAL_ASSIGN; | ||
207 | __entry->mc_count = mc_count; | ||
208 | __entry->ret = ret; | ||
209 | ), | ||
210 | |||
211 | TP_printk( | ||
212 | LOCAL_PR_FMT " prepare mc (%d): %llx", | ||
213 | LOCAL_PR_ARG, __entry->mc_count, | ||
214 | (unsigned long long) __entry->ret | ||
215 | ) | ||
216 | ); | ||
217 | |||
194 | TRACE_EVENT(drv_configure_filter, | 218 | TRACE_EVENT(drv_configure_filter, |
195 | TP_PROTO(struct ieee80211_local *local, | 219 | TP_PROTO(struct ieee80211_local *local, |
196 | unsigned int changed_flags, | 220 | unsigned int changed_flags, |
197 | unsigned int *total_flags, | 221 | unsigned int *total_flags, |
198 | int mc_count), | 222 | u64 multicast), |
199 | 223 | ||
200 | TP_ARGS(local, changed_flags, total_flags, mc_count), | 224 | TP_ARGS(local, changed_flags, total_flags, multicast), |
201 | 225 | ||
202 | TP_STRUCT__entry( | 226 | TP_STRUCT__entry( |
203 | LOCAL_ENTRY | 227 | LOCAL_ENTRY |
204 | __field(unsigned int, changed) | 228 | __field(unsigned int, changed) |
205 | __field(unsigned int, total) | 229 | __field(unsigned int, total) |
206 | __field(int, mc) | 230 | __field(u64, multicast) |
207 | ), | 231 | ), |
208 | 232 | ||
209 | TP_fast_assign( | 233 | TP_fast_assign( |
210 | LOCAL_ASSIGN; | 234 | LOCAL_ASSIGN; |
211 | __entry->changed = changed_flags; | 235 | __entry->changed = changed_flags; |
212 | __entry->total = *total_flags; | 236 | __entry->total = *total_flags; |
213 | __entry->mc = mc_count; | 237 | __entry->multicast = multicast; |
214 | ), | 238 | ), |
215 | 239 | ||
216 | TP_printk( | 240 | TP_printk( |
217 | LOCAL_PR_FMT " changed:%#x total:%#x mc:%d", | 241 | LOCAL_PR_FMT " changed:%#x total:%#x", |
218 | LOCAL_PR_ARG, __entry->changed, __entry->total, __entry->mc | 242 | LOCAL_PR_ARG, __entry->changed, __entry->total |
219 | ) | 243 | ) |
220 | ); | 244 | ); |
221 | 245 | ||