diff options
Diffstat (limited to 'net/mac80211/trace.h')
| -rw-r--r-- | net/mac80211/trace.h | 268 | 
1 files changed, 218 insertions, 50 deletions
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h index 1aba645882b..cfe1a0688b5 100644 --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h @@ -21,10 +21,10 @@  #define VIF_ENTRY	__field(enum nl80211_iftype, vif_type) __field(void *, sdata)	\  			__field(bool, p2p)						\ -			__string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>") +			__string(vif_name, sdata->name)  #define VIF_ASSIGN	__entry->vif_type = sdata->vif.type; __entry->sdata = sdata;	\  			__entry->p2p = sdata->vif.p2p;					\ -			__assign_str(vif_name, sdata->dev ? sdata->dev->name : sdata->name) +			__assign_str(vif_name, sdata->name)  #define VIF_PR_FMT	" vif:%s(%d%s)"  #define VIF_PR_ARG	__get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" @@ -41,14 +41,31 @@  #define CHANDEF_PR_ARG	__entry->control_freq, __entry->chan_width,			\  			__entry->center_freq1, __entry->center_freq2 +#define MIN_CHANDEF_ENTRY								\ +			__field(u32, min_control_freq)					\ +			__field(u32, min_chan_width)					\ +			__field(u32, min_center_freq1)					\ +			__field(u32, min_center_freq2) + +#define MIN_CHANDEF_ASSIGN(c)								\ +			__entry->min_control_freq = (c)->chan ? (c)->chan->center_freq : 0;	\ +			__entry->min_chan_width = (c)->width;				\ +			__entry->min_center_freq1 = (c)->center_freq1;			\ +			__entry->min_center_freq2 = (c)->center_freq2; +#define MIN_CHANDEF_PR_FMT	" min_control:%d MHz min_width:%d min_center: %d/%d MHz" +#define MIN_CHANDEF_PR_ARG	__entry->min_control_freq, __entry->min_chan_width,	\ +			__entry->min_center_freq1, __entry->min_center_freq2 +  #define CHANCTX_ENTRY	CHANDEF_ENTRY							\ +			MIN_CHANDEF_ENTRY						\  			__field(u8, rx_chains_static)					\  			__field(u8, rx_chains_dynamic)  #define CHANCTX_ASSIGN	CHANDEF_ASSIGN(&ctx->conf.def)					\ +			MIN_CHANDEF_ASSIGN(&ctx->conf.min_def)				\  			__entry->rx_chains_static = ctx->conf.rx_chains_static;		\  			__entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic -#define CHANCTX_PR_FMT	CHANDEF_PR_FMT " chains:%d/%d" -#define CHANCTX_PR_ARG	CHANDEF_PR_ARG,							\ +#define CHANCTX_PR_FMT	CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT " chains:%d/%d" +#define CHANCTX_PR_ARG	CHANDEF_PR_ARG,	MIN_CHANDEF_PR_ARG,				\  			__entry->rx_chains_static, __entry->rx_chains_dynamic @@ -77,13 +94,13 @@ DECLARE_EVENT_CLASS(local_sdata_addr_evt,  	TP_STRUCT__entry(  		LOCAL_ENTRY  		VIF_ENTRY -		__array(char, addr, 6) +		__array(char, addr, ETH_ALEN)  	),  	TP_fast_assign(  		LOCAL_ASSIGN;  		VIF_ASSIGN; -		memcpy(__entry->addr, sdata->vif.addr, 6); +		memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN);  	),  	TP_printk( @@ -167,6 +184,20 @@ TRACE_EVENT(drv_return_bool,  		  "true" : "false")  ); +TRACE_EVENT(drv_return_u32, +	TP_PROTO(struct ieee80211_local *local, u32 ret), +	TP_ARGS(local, ret), +	TP_STRUCT__entry( +		LOCAL_ENTRY +		__field(u32, ret) +	), +	TP_fast_assign( +		LOCAL_ASSIGN; +		__entry->ret = ret; +	), +	TP_printk(LOCAL_PR_FMT " - %u", LOCAL_PR_ARG, __entry->ret) +); +  TRACE_EVENT(drv_return_u64,  	TP_PROTO(struct ieee80211_local *local, u64 ret),  	TP_ARGS(local, ret), @@ -426,30 +457,6 @@ TRACE_EVENT(drv_prepare_multicast,  	)  ); -TRACE_EVENT(drv_set_multicast_list, -	TP_PROTO(struct ieee80211_local *local, -		 struct ieee80211_sub_if_data *sdata, int mc_count), - -	TP_ARGS(local, sdata, mc_count), - -	TP_STRUCT__entry( -		LOCAL_ENTRY -		__field(bool, allmulti) -		__field(int, mc_count) -	), - -	TP_fast_assign( -		LOCAL_ASSIGN; -		__entry->allmulti = sdata->flags & IEEE80211_SDATA_ALLMULTI; -		__entry->mc_count = mc_count; -	), - -	TP_printk( -		LOCAL_PR_FMT " configure mc filter, count=%d, allmulti=%d", -		LOCAL_PR_ARG, __entry->mc_count, __entry->allmulti -	) -); -  TRACE_EVENT(drv_configure_filter,  	TP_PROTO(struct ieee80211_local *local,  		 unsigned int changed_flags, @@ -560,7 +567,7 @@ TRACE_EVENT(drv_update_tkip_key,  	TP_printk(  		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x", -		LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32 +		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->iv32  	)  ); @@ -773,7 +780,7 @@ TRACE_EVENT(drv_sta_rc_update,  	)  ); -TRACE_EVENT(drv_sta_add, +DECLARE_EVENT_CLASS(sta_event,  	TP_PROTO(struct ieee80211_local *local,  		 struct ieee80211_sub_if_data *sdata,  		 struct ieee80211_sta *sta), @@ -798,29 +805,25 @@ TRACE_EVENT(drv_sta_add,  	)  ); -TRACE_EVENT(drv_sta_remove, +DEFINE_EVENT(sta_event, drv_sta_add,  	TP_PROTO(struct ieee80211_local *local,  		 struct ieee80211_sub_if_data *sdata,  		 struct ieee80211_sta *sta), +	TP_ARGS(local, sdata, sta) +); -	TP_ARGS(local, sdata, sta), - -	TP_STRUCT__entry( -		LOCAL_ENTRY -		VIF_ENTRY -		STA_ENTRY -	), - -	TP_fast_assign( -		LOCAL_ASSIGN; -		VIF_ASSIGN; -		STA_ASSIGN; -	), +DEFINE_EVENT(sta_event, drv_sta_remove, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_sub_if_data *sdata, +		 struct ieee80211_sta *sta), +	TP_ARGS(local, sdata, sta) +); -	TP_printk( -		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT, -		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG -	) +DEFINE_EVENT(sta_event, drv_sta_pre_rcu_remove, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_sub_if_data *sdata, +		 struct ieee80211_sta *sta), +	TP_ARGS(local, sdata, sta)  );  TRACE_EVENT(drv_conf_tx, @@ -1386,6 +1389,91 @@ TRACE_EVENT(drv_change_chanctx,  	)  ); +#if !defined(__TRACE_VIF_ENTRY) +#define __TRACE_VIF_ENTRY +struct trace_vif_entry { +	enum nl80211_iftype vif_type; +	bool p2p; +	char vif_name[IFNAMSIZ]; +} __packed; + +struct trace_chandef_entry { +	u32 control_freq; +	u32 chan_width; +	u32 center_freq1; +	u32 center_freq2; +} __packed; + +struct trace_switch_entry { +	struct trace_vif_entry vif; +	struct trace_chandef_entry old_chandef; +	struct trace_chandef_entry new_chandef; +} __packed; + +#define SWITCH_ENTRY_ASSIGN(to, from) local_vifs[i].to = vifs[i].from +#endif + +TRACE_EVENT(drv_switch_vif_chanctx, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_vif_chanctx_switch *vifs, +		 int n_vifs, enum ieee80211_chanctx_switch_mode mode), +	    TP_ARGS(local, vifs, n_vifs, mode), + +	TP_STRUCT__entry( +		LOCAL_ENTRY +		__field(int, n_vifs) +		__field(u32, mode) +		__dynamic_array(u8, vifs, +				sizeof(struct trace_switch_entry) * n_vifs) +	), + +	TP_fast_assign( +		LOCAL_ASSIGN; +		__entry->n_vifs = n_vifs; +		__entry->mode = mode; +		{ +			struct trace_switch_entry *local_vifs = +				__get_dynamic_array(vifs); +			int i; + +			for (i = 0; i < n_vifs; i++) { +				struct ieee80211_sub_if_data *sdata; + +				sdata = container_of(vifs[i].vif, +						struct ieee80211_sub_if_data, +						vif); + +				SWITCH_ENTRY_ASSIGN(vif.vif_type, vif->type); +				SWITCH_ENTRY_ASSIGN(vif.p2p, vif->p2p); +				strncpy(local_vifs[i].vif.vif_name, +					sdata->name, +					sizeof(local_vifs[i].vif.vif_name)); +				SWITCH_ENTRY_ASSIGN(old_chandef.control_freq, +						old_ctx->def.chan->center_freq); +				SWITCH_ENTRY_ASSIGN(old_chandef.chan_width, +						    old_ctx->def.width); +				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1, +						    old_ctx->def.center_freq1); +				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2, +						    old_ctx->def.center_freq2); +				SWITCH_ENTRY_ASSIGN(new_chandef.control_freq, +						new_ctx->def.chan->center_freq); +				SWITCH_ENTRY_ASSIGN(new_chandef.chan_width, +						    new_ctx->def.width); +				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1, +						    new_ctx->def.center_freq1); +				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2, +						    new_ctx->def.center_freq2); +			} +		} +	), + +	TP_printk( +		LOCAL_PR_FMT " n_vifs:%d mode:%d", +		LOCAL_PR_ARG, __entry->n_vifs, __entry->mode +	) +); +  DECLARE_EVENT_CLASS(local_sdata_chanctx,  	TP_PROTO(struct ieee80211_local *local,  		 struct ieee80211_sub_if_data *sdata, @@ -1475,6 +1563,59 @@ DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,  );  #endif +TRACE_EVENT(drv_join_ibss, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_sub_if_data *sdata, +		 struct ieee80211_bss_conf *info), + +	TP_ARGS(local, sdata, info), + +	TP_STRUCT__entry( +		LOCAL_ENTRY +		VIF_ENTRY +		__field(u8, dtimper) +		__field(u16, bcnint) +		__dynamic_array(u8, ssid, info->ssid_len); +	), + +	TP_fast_assign( +		LOCAL_ASSIGN; +		VIF_ASSIGN; +		__entry->dtimper = info->dtim_period; +		__entry->bcnint = info->beacon_int; +		memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len); +	), + +	TP_printk( +		LOCAL_PR_FMT  VIF_PR_FMT, +		LOCAL_PR_ARG, VIF_PR_ARG +	) +); + +DEFINE_EVENT(local_sdata_evt, drv_leave_ibss, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_sub_if_data *sdata), +	TP_ARGS(local, sdata) +); + +TRACE_EVENT(drv_get_expected_throughput, +	TP_PROTO(struct ieee80211_sta *sta), + +	TP_ARGS(sta), + +	TP_STRUCT__entry( +		STA_ENTRY +	), + +	TP_fast_assign( +		STA_ASSIGN; +	), + +	TP_printk( +		STA_PR_FMT, STA_PR_ARG +	) +); +  /*   * Tracing for API calls that drivers call.   */ @@ -1811,6 +1952,33 @@ TRACE_EVENT(api_eosp,  	)  ); +TRACE_EVENT(api_sta_set_buffered, +	TP_PROTO(struct ieee80211_local *local, +		 struct ieee80211_sta *sta, +		 u8 tid, bool buffered), + +	TP_ARGS(local, sta, tid, buffered), + +	TP_STRUCT__entry( +		LOCAL_ENTRY +		STA_ENTRY +		__field(u8, tid) +		__field(bool, buffered) +	), + +	TP_fast_assign( +		LOCAL_ASSIGN; +		STA_ASSIGN; +		__entry->tid = tid; +		__entry->buffered = buffered; +	), + +	TP_printk( +		LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d", +		LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered +	) +); +  /*   * Tracing for internal functions   * (which may also be called in response to driver calls)  | 
