xref: /OK3568_Linux_fs/kernel/include/trace/events/qdisc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #undef TRACE_SYSTEM
2*4882a593Smuzhiyun #define TRACE_SYSTEM qdisc
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #if !defined(_TRACE_QDISC_H) || defined(TRACE_HEADER_MULTI_READ)
5*4882a593Smuzhiyun #define _TRACE_QDISC_H
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <linux/skbuff.h>
8*4882a593Smuzhiyun #include <linux/netdevice.h>
9*4882a593Smuzhiyun #include <linux/tracepoint.h>
10*4882a593Smuzhiyun #include <linux/ftrace.h>
11*4882a593Smuzhiyun #include <linux/pkt_sched.h>
12*4882a593Smuzhiyun #include <net/sch_generic.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun TRACE_EVENT(qdisc_dequeue,
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun 	TP_PROTO(struct Qdisc *qdisc, const struct netdev_queue *txq,
17*4882a593Smuzhiyun 		 int packets, struct sk_buff *skb),
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	TP_ARGS(qdisc, txq, packets, skb),
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 	TP_STRUCT__entry(
22*4882a593Smuzhiyun 		__field(	struct Qdisc *,		qdisc	)
23*4882a593Smuzhiyun 		__field(const	struct netdev_queue *,	txq	)
24*4882a593Smuzhiyun 		__field(	int,			packets	)
25*4882a593Smuzhiyun 		__field(	void *,			skbaddr	)
26*4882a593Smuzhiyun 		__field(	int,			ifindex	)
27*4882a593Smuzhiyun 		__field(	u32,			handle	)
28*4882a593Smuzhiyun 		__field(	u32,			parent	)
29*4882a593Smuzhiyun 		__field(	unsigned long,		txq_state)
30*4882a593Smuzhiyun 	),
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	/* skb==NULL indicate packets dequeued was 0, even when packets==1 */
33*4882a593Smuzhiyun 	TP_fast_assign(
34*4882a593Smuzhiyun 		__entry->qdisc		= qdisc;
35*4882a593Smuzhiyun 		__entry->txq		= txq;
36*4882a593Smuzhiyun 		__entry->packets	= skb ? packets : 0;
37*4882a593Smuzhiyun 		__entry->skbaddr	= skb;
38*4882a593Smuzhiyun 		__entry->ifindex	= txq->dev ? txq->dev->ifindex : 0;
39*4882a593Smuzhiyun 		__entry->handle		= qdisc->handle;
40*4882a593Smuzhiyun 		__entry->parent		= qdisc->parent;
41*4882a593Smuzhiyun 		__entry->txq_state	= txq->state;
42*4882a593Smuzhiyun 	),
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	TP_printk("dequeue ifindex=%d qdisc handle=0x%X parent=0x%X txq_state=0x%lX packets=%d skbaddr=%p",
45*4882a593Smuzhiyun 		  __entry->ifindex, __entry->handle, __entry->parent,
46*4882a593Smuzhiyun 		  __entry->txq_state, __entry->packets, __entry->skbaddr )
47*4882a593Smuzhiyun );
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun TRACE_EVENT(qdisc_reset,
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	TP_PROTO(struct Qdisc *q),
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun 	TP_ARGS(q),
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun 	TP_STRUCT__entry(
56*4882a593Smuzhiyun 		__string(	dev,		qdisc_dev(q)	)
57*4882a593Smuzhiyun 		__string(	kind,		q->ops->id	)
58*4882a593Smuzhiyun 		__field(	u32,		parent		)
59*4882a593Smuzhiyun 		__field(	u32,		handle		)
60*4882a593Smuzhiyun 	),
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	TP_fast_assign(
63*4882a593Smuzhiyun 		__assign_str(dev, qdisc_dev(q));
64*4882a593Smuzhiyun 		__assign_str(kind, q->ops->id);
65*4882a593Smuzhiyun 		__entry->parent = q->parent;
66*4882a593Smuzhiyun 		__entry->handle = q->handle;
67*4882a593Smuzhiyun 	),
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun 	TP_printk("dev=%s kind=%s parent=%x:%x handle=%x:%x", __get_str(dev),
70*4882a593Smuzhiyun 		  __get_str(kind), TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent),
71*4882a593Smuzhiyun 		  TC_H_MAJ(__entry->handle) >> 16, TC_H_MIN(__entry->handle))
72*4882a593Smuzhiyun );
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun TRACE_EVENT(qdisc_destroy,
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun 	TP_PROTO(struct Qdisc *q),
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 	TP_ARGS(q),
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun 	TP_STRUCT__entry(
81*4882a593Smuzhiyun 		__string(	dev,		qdisc_dev(q)	)
82*4882a593Smuzhiyun 		__string(	kind,		q->ops->id	)
83*4882a593Smuzhiyun 		__field(	u32,		parent		)
84*4882a593Smuzhiyun 		__field(	u32,		handle		)
85*4882a593Smuzhiyun 	),
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	TP_fast_assign(
88*4882a593Smuzhiyun 		__assign_str(dev, qdisc_dev(q));
89*4882a593Smuzhiyun 		__assign_str(kind, q->ops->id);
90*4882a593Smuzhiyun 		__entry->parent = q->parent;
91*4882a593Smuzhiyun 		__entry->handle = q->handle;
92*4882a593Smuzhiyun 	),
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun 	TP_printk("dev=%s kind=%s parent=%x:%x handle=%x:%x", __get_str(dev),
95*4882a593Smuzhiyun 		  __get_str(kind), TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent),
96*4882a593Smuzhiyun 		  TC_H_MAJ(__entry->handle) >> 16, TC_H_MIN(__entry->handle))
97*4882a593Smuzhiyun );
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun TRACE_EVENT(qdisc_create,
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	TP_PROTO(const struct Qdisc_ops *ops, struct net_device *dev, u32 parent),
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	TP_ARGS(ops, dev, parent),
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun 	TP_STRUCT__entry(
106*4882a593Smuzhiyun 		__string(	dev,		dev->name	)
107*4882a593Smuzhiyun 		__string(	kind,		ops->id		)
108*4882a593Smuzhiyun 		__field(	u32,		parent		)
109*4882a593Smuzhiyun 	),
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 	TP_fast_assign(
112*4882a593Smuzhiyun 		__assign_str(dev, dev->name);
113*4882a593Smuzhiyun 		__assign_str(kind, ops->id);
114*4882a593Smuzhiyun 		__entry->parent = parent;
115*4882a593Smuzhiyun 	),
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	TP_printk("dev=%s kind=%s parent=%x:%x",
118*4882a593Smuzhiyun 		  __get_str(dev), __get_str(kind),
119*4882a593Smuzhiyun 		  TC_H_MAJ(__entry->parent) >> 16, TC_H_MIN(__entry->parent))
120*4882a593Smuzhiyun );
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun #endif /* _TRACE_QDISC_H */
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* This part must be outside protection */
125*4882a593Smuzhiyun #include <trace/define_trace.h>
126