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