mac80211: enhance tracing
Johannes Berg
maintainerPATCH 1/1 mac80211: enhance tracing
Enhance tracing by adding tracing for a variety of callbacks that the drivers call, and also for internal calls (currently limited to queue status). This can aid debugging what is going on in mac80211 in interaction with drivers, since we can now see what drivers call and not just what mac80211 calls in the driver.
Signed-off-by Johannes Berg <[email protected]>
--- net/mac80211/Kconfig | 8 - net/mac80211/agg-tx.c | 8 + net/mac80211/driver-trace.h | 275 ++++++++++++++++++++++++++++++++++++++++++++ net/mac80211/main.c | 2 net/mac80211/mlme.c | 6 net/mac80211/scan.c | 2 net/mac80211/sta_info.c | 2 net/mac80211/util.c | 4 8 files changed, 303 insertions(+), 4 deletions(-)
net/mac80211/Kconfig +4 -4
@@ -221,8 +221,8 @@ config MAC80211_DRIVER_API_TRACER depends on EVENT_TRACING help Say Y here to make mac80211 register with the ftrace - framework for the driver API -- you can see which - driver methods it is calling then by looking at the - trace. + framework for the driver API -- you can then see which + driver methods it is calling and which API functions + drivers are calling by looking at the trace. - If unsure, say N. + If unsure, say Y.
net/mac80211/agg-tx.c +8 -0
@@ -214,6 +214,8 @@ int ieee80211_start_tx_ba_session(structint ret =0 ;u16 start_seq_num; +trace_api_start_tx_ba_session (pubsta, tid); +if (WARN_ON (!local->ops->ampdu_action))return -EINVAL ;
@@ -440,6 +442,8 @@ void ieee80211_start_tx_ba_cb(struct ieestruct sta_info *sta;u8 *state; +trace_api_start_tx_ba_cb (sdata, ra, tid); +if (tid >=STA_TID_NUM ) {#ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n",
@@ -541,6 +545,8 @@ int ieee80211_stop_tx_ba_session(structstruct ieee80211_sub_if_data *sdata = sta->sdata;struct ieee80211_local *local = sdata->local; +trace_api_stop_tx_ba_session (pubsta, tid, initiator); +if (!local->ops->ampdu_action)return -EINVAL ;
@@ -558,6 +564,8 @@ void ieee80211_stop_tx_ba_cb(struct ieeestruct sta_info *sta;u8 *state; +trace_api_stop_tx_ba_cb (sdata, ra, tid); +if (tid >=STA_TID_NUM ) {#ifdef CONFIG_MAC80211_HT_DEBUG printk(KERN_DEBUG "Bad TID value: tid = %d (>= %d)\n",
net/mac80211/driver-trace.h +275 -0
287 lines not on this page · raw message
net/mac80211/main.c +2 -0
@@ -309,6 +309,8 @@ void ieee80211_restart_hw(struct ieee802 {struct ieee80211_local *local =hw_to_local (hw); +trace_api_restart_hw (local); +/* use this reason, __ieee80211_resume will unblock it */ ieee80211_stop_queues_by_reason (hw,IEEE80211_QUEUE_STOP_REASON_SUSPEND );
net/mac80211/mlme.c +6 -0
@@ -1003,6 +1003,8 @@ void ieee80211_beacon_loss(struct ieee80struct ieee80211_sub_if_data *sdata =vif_to_sdata (vif);struct ieee80211_hw *hw = &sdata->local->hw; +trace_api_beacon_loss (sdata); +WARN_ON (hw->flags &IEEE80211_HW_CONNECTION_MONITOR );ieee80211_queue_work (hw, &sdata->u.mgd.beacon_connection_loss_work); }
@@ -1013,6 +1015,8 @@ void ieee80211_connection_loss(struct iestruct ieee80211_sub_if_data *sdata =vif_to_sdata (vif);struct ieee80211_hw *hw = &sdata->local->hw; +trace_api_connection_loss (sdata); +WARN_ON (!(hw->flags &IEEE80211_HW_CONNECTION_MONITOR ));ieee80211_queue_work (hw, &sdata->u.mgd.beacon_connection_loss_work); }
@@ -2254,6 +2258,8 @@ void ieee80211_cqm_rssi_notify(struct ie {struct ieee80211_sub_if_data *sdata =vif_to_sdata (vif); +trace_api_cqm_rssi_notify (sdata, rssi_event); +cfg80211_cqm_rssi_notify (sdata->dev, rssi_event, gfp); }EXPORT_SYMBOL (ieee80211_cqm_rssi_notify);
net/mac80211/scan.c +2 -0
@@ -247,6 +247,8 @@ void ieee80211_scan_completed(struct ieestruct ieee80211_local *local =hw_to_local (hw);bool was_hw_scan; +trace_api_scan_completed (local, aborted); +mutex_lock (&local->scan_mtx);/*
net/mac80211/sta_info.c +2 -0
@@ -957,6 +957,8 @@ void ieee80211_sta_block_awake(struct ie { struct sta_info *sta = container_of(pubsta, struct sta_info, sta); +trace_api_sta_block_awake (sta->local, pubsta, block); +if (block)set_sta_flags (sta,WLAN_STA_PS_DRIVER );else
net/mac80211/util.c +4 -0
@@ -270,6 +270,8 @@ static void __ieee80211_wake_queue(strucstruct ieee80211_local *local =hw_to_local (hw);struct ieee80211_sub_if_data *sdata; +trace_wake_queue (local, queue, reason); +if (WARN_ON (queue >= hw->queues))return ;
@@ -312,6 +314,8 @@ static void __ieee80211_stop_queue(strucstruct ieee80211_local *local =hw_to_local (hw);struct ieee80211_sub_if_data *sdata; +trace_stop_queue (local, queue, reason); +if (WARN_ON (queue >= hw->queues))return ;