diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/Kconfig | 8 | ||||
-rw-r--r-- | net/mac80211/agg-tx.c | 8 | ||||
-rw-r--r-- | net/mac80211/driver-trace.h | 275 | ||||
-rw-r--r-- | net/mac80211/main.c | 2 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 6 | ||||
-rw-r--r-- | net/mac80211/scan.c | 2 | ||||
-rw-r--r-- | net/mac80211/sta_info.c | 2 | ||||
-rw-r--r-- | net/mac80211/util.c | 4 |
8 files changed, 303 insertions, 4 deletions
diff --git a/net/mac80211/Kconfig b/net/mac80211/Kconfig index 334c359da5e8..8a91f6c0bb18 100644 --- a/net/mac80211/Kconfig +++ b/net/mac80211/Kconfig | |||
@@ -221,8 +221,8 @@ config MAC80211_DRIVER_API_TRACER | |||
221 | depends on EVENT_TRACING | 221 | depends on EVENT_TRACING |
222 | help | 222 | help |
223 | Say Y here to make mac80211 register with the ftrace | 223 | Say Y here to make mac80211 register with the ftrace |
224 | framework for the driver API -- you can see which | 224 | framework for the driver API -- you can then see which |
225 | driver methods it is calling then by looking at the | 225 | driver methods it is calling and which API functions |
226 | trace. | 226 | drivers are calling by looking at the trace. |
227 | 227 | ||
228 | If unsure, say N. | 228 | If unsure, say Y. |
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index 32d2148b5b98..6bb4d0a1e5c5 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c | |||
@@ -214,6 +214,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid) | |||
214 | int ret = 0; | 214 | int ret = 0; |
215 | u16 start_seq_num; | 215 | u16 start_seq_num; |
216 | 216 | ||
217 | trace_api_start_tx_ba_session(pubsta, tid); | ||
218 | |||
217 | if (WARN_ON(!local->ops->ampdu_action)) | 219 | if (WARN_ON(!local->ops->ampdu_action)) |
218 | return -EINVAL; | 220 | return -EINVAL; |
219 | 221 | ||
@@ -440,6 +442,8 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid) | |||
440 | struct sta_info *sta; | 442 | struct sta_info *sta; |
441 | u8 *state; | 443 | u8 *state; |
442 | 444 | ||
445 | trace_api_start_tx_ba_cb(sdata, ra, tid); | ||
446 | |||
443 | if (tid >= STA_TID_NUM) { | 447 | if (tid >= STA_TID_NUM) { |
444 | #ifdef CONFIG_MAC80211_HT_DEBUG | 448 | #ifdef CONFIG_MAC80211_HT_DEBUG |
445 | printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", | 449 | printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", |
@@ -541,6 +545,8 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid, | |||
541 | struct ieee80211_sub_if_data *sdata = sta->sdata; | 545 | struct ieee80211_sub_if_data *sdata = sta->sdata; |
542 | struct ieee80211_local *local = sdata->local; | 546 | struct ieee80211_local *local = sdata->local; |
543 | 547 | ||
548 | trace_api_stop_tx_ba_session(pubsta, tid, initiator); | ||
549 | |||
544 | if (!local->ops->ampdu_action) | 550 | if (!local->ops->ampdu_action) |
545 | return -EINVAL; | 551 | return -EINVAL; |
546 | 552 | ||
@@ -558,6 +564,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid) | |||
558 | struct sta_info *sta; | 564 | struct sta_info *sta; |
559 | u8 *state; | 565 | u8 *state; |
560 | 566 | ||
567 | trace_api_stop_tx_ba_cb(sdata, ra, tid); | ||
568 | |||
561 | if (tid >= STA_TID_NUM) { | 569 | if (tid >= STA_TID_NUM) { |
562 | #ifdef CONFIG_MAC80211_HT_DEBUG | 570 | #ifdef CONFIG_MAC80211_HT_DEBUG |
563 | printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", | 571 | printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n", |
diff --git a/net/mac80211/driver-trace.h b/net/mac80211/driver-trace.h index 41baf730a5c7..e209cb82ff29 100644 --- a/net/mac80211/driver-trace.h +++ b/net/mac80211/driver-trace.h | |||
@@ -32,6 +32,10 @@ static inline void trace_ ## name(proto) {} | |||
32 | #define VIF_PR_FMT " vif:%s(%d)" | 32 | #define VIF_PR_FMT " vif:%s(%d)" |
33 | #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type | 33 | #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type |
34 | 34 | ||
35 | /* | ||
36 | * Tracing for driver callbacks. | ||
37 | */ | ||
38 | |||
35 | TRACE_EVENT(drv_start, | 39 | TRACE_EVENT(drv_start, |
36 | TP_PROTO(struct ieee80211_local *local, int ret), | 40 | TP_PROTO(struct ieee80211_local *local, int ret), |
37 | 41 | ||
@@ -766,6 +770,277 @@ TRACE_EVENT(drv_flush, | |||
766 | LOCAL_PR_ARG, __entry->drop | 770 | LOCAL_PR_ARG, __entry->drop |
767 | ) | 771 | ) |
768 | ); | 772 | ); |
773 | |||
774 | /* | ||
775 | * Tracing for API calls that drivers call. | ||
776 | */ | ||
777 | |||
778 | TRACE_EVENT(api_start_tx_ba_session, | ||
779 | TP_PROTO(struct ieee80211_sta *sta, u16 tid), | ||
780 | |||
781 | TP_ARGS(sta, tid), | ||
782 | |||
783 | TP_STRUCT__entry( | ||
784 | STA_ENTRY | ||
785 | __field(u16, tid) | ||
786 | ), | ||
787 | |||
788 | TP_fast_assign( | ||
789 | STA_ASSIGN; | ||
790 | __entry->tid = tid; | ||
791 | ), | ||
792 | |||
793 | TP_printk( | ||
794 | STA_PR_FMT " tid:%d", | ||
795 | STA_PR_ARG, __entry->tid | ||
796 | ) | ||
797 | ); | ||
798 | |||
799 | TRACE_EVENT(api_start_tx_ba_cb, | ||
800 | TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), | ||
801 | |||
802 | TP_ARGS(sdata, ra, tid), | ||
803 | |||
804 | TP_STRUCT__entry( | ||
805 | VIF_ENTRY | ||
806 | __array(u8, ra, ETH_ALEN) | ||
807 | __field(u16, tid) | ||
808 | ), | ||
809 | |||
810 | TP_fast_assign( | ||
811 | VIF_ASSIGN; | ||
812 | memcpy(__entry->ra, ra, ETH_ALEN); | ||
813 | __entry->tid = tid; | ||
814 | ), | ||
815 | |||
816 | TP_printk( | ||
817 | VIF_PR_FMT " ra:%pM tid:%d", | ||
818 | VIF_PR_ARG, __entry->ra, __entry->tid | ||
819 | ) | ||
820 | ); | ||
821 | |||
822 | TRACE_EVENT(api_stop_tx_ba_session, | ||
823 | TP_PROTO(struct ieee80211_sta *sta, u16 tid, u16 initiator), | ||
824 | |||
825 | TP_ARGS(sta, tid, initiator), | ||
826 | |||
827 | TP_STRUCT__entry( | ||
828 | STA_ENTRY | ||
829 | __field(u16, tid) | ||
830 | __field(u16, initiator) | ||
831 | ), | ||
832 | |||
833 | TP_fast_assign( | ||
834 | STA_ASSIGN; | ||
835 | __entry->tid = tid; | ||
836 | __entry->initiator = initiator; | ||
837 | ), | ||
838 | |||
839 | TP_printk( | ||
840 | STA_PR_FMT " tid:%d initiator:%d", | ||
841 | STA_PR_ARG, __entry->tid, __entry->initiator | ||
842 | ) | ||
843 | ); | ||
844 | |||
845 | TRACE_EVENT(api_stop_tx_ba_cb, | ||
846 | TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), | ||
847 | |||
848 | TP_ARGS(sdata, ra, tid), | ||
849 | |||
850 | TP_STRUCT__entry( | ||
851 | VIF_ENTRY | ||
852 | __array(u8, ra, ETH_ALEN) | ||
853 | __field(u16, tid) | ||
854 | ), | ||
855 | |||
856 | TP_fast_assign( | ||
857 | VIF_ASSIGN; | ||
858 | memcpy(__entry->ra, ra, ETH_ALEN); | ||
859 | __entry->tid = tid; | ||
860 | ), | ||
861 | |||
862 | TP_printk( | ||
863 | VIF_PR_FMT " ra:%pM tid:%d", | ||
864 | VIF_PR_ARG, __entry->ra, __entry->tid | ||
865 | ) | ||
866 | ); | ||
867 | |||
868 | TRACE_EVENT(api_restart_hw, | ||
869 | TP_PROTO(struct ieee80211_local *local), | ||
870 | |||
871 | TP_ARGS(local), | ||
872 | |||
873 | TP_STRUCT__entry( | ||
874 | LOCAL_ENTRY | ||
875 | ), | ||
876 | |||
877 | TP_fast_assign( | ||
878 | LOCAL_ASSIGN; | ||
879 | ), | ||
880 | |||
881 | TP_printk( | ||
882 | LOCAL_PR_FMT, | ||
883 | LOCAL_PR_ARG | ||
884 | ) | ||
885 | ); | ||
886 | |||
887 | TRACE_EVENT(api_beacon_loss, | ||
888 | TP_PROTO(struct ieee80211_sub_if_data *sdata), | ||
889 | |||
890 | TP_ARGS(sdata), | ||
891 | |||
892 | TP_STRUCT__entry( | ||
893 | VIF_ENTRY | ||
894 | ), | ||
895 | |||
896 | TP_fast_assign( | ||
897 | VIF_ASSIGN; | ||
898 | ), | ||
899 | |||
900 | TP_printk( | ||
901 | VIF_PR_FMT, | ||
902 | VIF_PR_ARG | ||
903 | ) | ||
904 | ); | ||
905 | |||
906 | TRACE_EVENT(api_connection_loss, | ||
907 | TP_PROTO(struct ieee80211_sub_if_data *sdata), | ||
908 | |||
909 | TP_ARGS(sdata), | ||
910 | |||
911 | TP_STRUCT__entry( | ||
912 | VIF_ENTRY | ||
913 | ), | ||
914 | |||
915 | TP_fast_assign( | ||
916 | VIF_ASSIGN; | ||
917 | ), | ||
918 | |||
919 | TP_printk( | ||
920 | VIF_PR_FMT, | ||
921 | VIF_PR_ARG | ||
922 | ) | ||
923 | ); | ||
924 | |||
925 | TRACE_EVENT(api_cqm_rssi_notify, | ||
926 | TP_PROTO(struct ieee80211_sub_if_data *sdata, | ||
927 | enum nl80211_cqm_rssi_threshold_event rssi_event), | ||
928 | |||
929 | TP_ARGS(sdata, rssi_event), | ||
930 | |||
931 | TP_STRUCT__entry( | ||
932 | VIF_ENTRY | ||
933 | __field(u32, rssi_event) | ||
934 | ), | ||
935 | |||
936 | TP_fast_assign( | ||
937 | VIF_ASSIGN; | ||
938 | __entry->rssi_event = rssi_event; | ||
939 | ), | ||
940 | |||
941 | TP_printk( | ||
942 | VIF_PR_FMT " event:%d", | ||
943 | VIF_PR_ARG, __entry->rssi_event | ||
944 | ) | ||
945 | ); | ||
946 | |||
947 | TRACE_EVENT(api_scan_completed, | ||
948 | TP_PROTO(struct ieee80211_local *local, bool aborted), | ||
949 | |||
950 | TP_ARGS(local, aborted), | ||
951 | |||
952 | TP_STRUCT__entry( | ||
953 | LOCAL_ENTRY | ||
954 | __field(bool, aborted) | ||
955 | ), | ||
956 | |||
957 | TP_fast_assign( | ||
958 | LOCAL_ASSIGN; | ||
959 | __entry->aborted = aborted; | ||
960 | ), | ||
961 | |||
962 | TP_printk( | ||
963 | LOCAL_PR_FMT " aborted:%d", | ||
964 | LOCAL_PR_ARG, __entry->aborted | ||
965 | ) | ||
966 | ); | ||
967 | |||
968 | TRACE_EVENT(api_sta_block_awake, | ||
969 | TP_PROTO(struct ieee80211_local *local, | ||
970 | struct ieee80211_sta *sta, bool block), | ||
971 | |||
972 | TP_ARGS(local, sta, block), | ||
973 | |||
974 | TP_STRUCT__entry( | ||
975 | LOCAL_ENTRY | ||
976 | STA_ENTRY | ||
977 | __field(bool, block) | ||
978 | ), | ||
979 | |||
980 | TP_fast_assign( | ||
981 | LOCAL_ASSIGN; | ||
982 | STA_ASSIGN; | ||
983 | __entry->block = block; | ||
984 | ), | ||
985 | |||
986 | TP_printk( | ||
987 | LOCAL_PR_FMT STA_PR_FMT " block:%d", | ||
988 | LOCAL_PR_ARG, STA_PR_FMT, __entry->block | ||
989 | ) | ||
990 | ); | ||
991 | |||
992 | /* | ||
993 | * Tracing for internal functions | ||
994 | * (which may also be called in response to driver calls) | ||
995 | */ | ||
996 | |||
997 | TRACE_EVENT(wake_queue, | ||
998 | TP_PROTO(struct ieee80211_local *local, u16 queue, | ||
999 | enum queue_stop_reason reason), | ||
1000 | |||
1001 | TP_ARGS(local, queue, reason), | ||
1002 | |||
1003 | TP_STRUCT__entry( | ||
1004 | LOCAL_ENTRY | ||
1005 | __field(u16, queue) | ||
1006 | __field(u32, reason) | ||
1007 | ), | ||
1008 | |||
1009 | TP_fast_assign( | ||
1010 | LOCAL_ASSIGN; | ||
1011 | __entry->queue = queue; | ||
1012 | __entry->reason = reason; | ||
1013 | ), | ||
1014 | |||
1015 | TP_printk( | ||
1016 | LOCAL_PR_FMT " queue:%d, reason:%d", | ||
1017 | LOCAL_PR_ARG, __entry->queue, __entry->reason | ||
1018 | ) | ||
1019 | ); | ||
1020 | |||
1021 | TRACE_EVENT(stop_queue, | ||
1022 | TP_PROTO(struct ieee80211_local *local, u16 queue, | ||
1023 | enum queue_stop_reason reason), | ||
1024 | |||
1025 | TP_ARGS(local, queue, reason), | ||
1026 | |||
1027 | TP_STRUCT__entry( | ||
1028 | LOCAL_ENTRY | ||
1029 | __field(u16, queue) | ||
1030 | __field(u32, reason) | ||
1031 | ), | ||
1032 | |||
1033 | TP_fast_assign( | ||
1034 | LOCAL_ASSIGN; | ||
1035 | __entry->queue = queue; | ||
1036 | __entry->reason = reason; | ||
1037 | ), | ||
1038 | |||
1039 | TP_printk( | ||
1040 | LOCAL_PR_FMT " queue:%d, reason:%d", | ||
1041 | LOCAL_PR_ARG, __entry->queue, __entry->reason | ||
1042 | ) | ||
1043 | ); | ||
769 | #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ | 1044 | #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ |
770 | 1045 | ||
771 | #undef TRACE_INCLUDE_PATH | 1046 | #undef TRACE_INCLUDE_PATH |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index b887e484ae04..4afe851cf8dc 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -309,6 +309,8 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw) | |||
309 | { | 309 | { |
310 | struct ieee80211_local *local = hw_to_local(hw); | 310 | struct ieee80211_local *local = hw_to_local(hw); |
311 | 311 | ||
312 | trace_api_restart_hw(local); | ||
313 | |||
312 | /* use this reason, __ieee80211_resume will unblock it */ | 314 | /* use this reason, __ieee80211_resume will unblock it */ |
313 | ieee80211_stop_queues_by_reason(hw, | 315 | ieee80211_stop_queues_by_reason(hw, |
314 | IEEE80211_QUEUE_STOP_REASON_SUSPEND); | 316 | IEEE80211_QUEUE_STOP_REASON_SUSPEND); |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 461167dfa42c..d11a54c289a2 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -1007,6 +1007,8 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif) | |||
1007 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); | 1007 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); |
1008 | struct ieee80211_hw *hw = &sdata->local->hw; | 1008 | struct ieee80211_hw *hw = &sdata->local->hw; |
1009 | 1009 | ||
1010 | trace_api_beacon_loss(sdata); | ||
1011 | |||
1010 | WARN_ON(hw->flags & IEEE80211_HW_CONNECTION_MONITOR); | 1012 | WARN_ON(hw->flags & IEEE80211_HW_CONNECTION_MONITOR); |
1011 | ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); | 1013 | ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); |
1012 | } | 1014 | } |
@@ -1017,6 +1019,8 @@ void ieee80211_connection_loss(struct ieee80211_vif *vif) | |||
1017 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); | 1019 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); |
1018 | struct ieee80211_hw *hw = &sdata->local->hw; | 1020 | struct ieee80211_hw *hw = &sdata->local->hw; |
1019 | 1021 | ||
1022 | trace_api_connection_loss(sdata); | ||
1023 | |||
1020 | WARN_ON(!(hw->flags & IEEE80211_HW_CONNECTION_MONITOR)); | 1024 | WARN_ON(!(hw->flags & IEEE80211_HW_CONNECTION_MONITOR)); |
1021 | ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); | 1025 | ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work); |
1022 | } | 1026 | } |
@@ -2261,6 +2265,8 @@ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, | |||
2261 | { | 2265 | { |
2262 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); | 2266 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); |
2263 | 2267 | ||
2268 | trace_api_cqm_rssi_notify(sdata, rssi_event); | ||
2269 | |||
2264 | cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); | 2270 | cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); |
2265 | } | 2271 | } |
2266 | EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); | 2272 | EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); |
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c index 75a85978c3b3..eb86a5f6e645 100644 --- a/net/mac80211/scan.c +++ b/net/mac80211/scan.c | |||
@@ -247,6 +247,8 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted) | |||
247 | struct ieee80211_local *local = hw_to_local(hw); | 247 | struct ieee80211_local *local = hw_to_local(hw); |
248 | bool was_hw_scan; | 248 | bool was_hw_scan; |
249 | 249 | ||
250 | trace_api_scan_completed(local, aborted); | ||
251 | |||
250 | mutex_lock(&local->scan_mtx); | 252 | mutex_lock(&local->scan_mtx); |
251 | 253 | ||
252 | /* | 254 | /* |
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 4de987cbda1c..ff0eb948917b 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -957,6 +957,8 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
957 | { | 957 | { |
958 | struct sta_info *sta = container_of(pubsta, struct sta_info, sta); | 958 | struct sta_info *sta = container_of(pubsta, struct sta_info, sta); |
959 | 959 | ||
960 | trace_api_sta_block_awake(sta->local, pubsta, block); | ||
961 | |||
960 | if (block) | 962 | if (block) |
961 | set_sta_flags(sta, WLAN_STA_PS_DRIVER); | 963 | set_sta_flags(sta, WLAN_STA_PS_DRIVER); |
962 | else | 964 | else |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index ad9009f717ed..2b75b4fb68f4 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -270,6 +270,8 @@ static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, | |||
270 | struct ieee80211_local *local = hw_to_local(hw); | 270 | struct ieee80211_local *local = hw_to_local(hw); |
271 | struct ieee80211_sub_if_data *sdata; | 271 | struct ieee80211_sub_if_data *sdata; |
272 | 272 | ||
273 | trace_wake_queue(local, queue, reason); | ||
274 | |||
273 | if (WARN_ON(queue >= hw->queues)) | 275 | if (WARN_ON(queue >= hw->queues)) |
274 | return; | 276 | return; |
275 | 277 | ||
@@ -312,6 +314,8 @@ static void __ieee80211_stop_queue(struct ieee80211_hw *hw, int queue, | |||
312 | struct ieee80211_local *local = hw_to_local(hw); | 314 | struct ieee80211_local *local = hw_to_local(hw); |
313 | struct ieee80211_sub_if_data *sdata; | 315 | struct ieee80211_sub_if_data *sdata; |
314 | 316 | ||
317 | trace_stop_queue(local, queue, reason); | ||
318 | |||
315 | if (WARN_ON(queue >= hw->queues)) | 319 | if (WARN_ON(queue >= hw->queues)) |
316 | return; | 320 | return; |
317 | 321 | ||