net: Add trace events for all receive entry points, exposing more skb fields
The existing net/netif_rx and net/netif_receive_skb trace events provide little information about the skb, nor do they indicate how it entered the stack. Add trace events at entry of each of the exported functions, including most fields that are likely to be interesting for debugging driver datapath behaviour. Split netif_rx() and netif_receive_skb() so that internal calls are not traced. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
d87d04a785
commit
ae78dbfa40
@@ -136,6 +136,106 @@ DEFINE_EVENT(net_dev_template, netif_rx,
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__string( name, skb->dev->name )
|
||||
__field( unsigned int, napi_id )
|
||||
__field( u16, queue_mapping )
|
||||
__field( const void *, skbaddr )
|
||||
__field( bool, vlan_tagged )
|
||||
__field( u16, vlan_proto )
|
||||
__field( u16, vlan_tci )
|
||||
__field( u16, protocol )
|
||||
__field( u8, ip_summed )
|
||||
__field( u32, rxhash )
|
||||
__field( bool, l4_rxhash )
|
||||
__field( unsigned int, len )
|
||||
__field( unsigned int, data_len )
|
||||
__field( unsigned int, truesize )
|
||||
__field( bool, mac_header_valid)
|
||||
__field( int, mac_header )
|
||||
__field( unsigned char, nr_frags )
|
||||
__field( u16, gso_size )
|
||||
__field( u16, gso_type )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(name, skb->dev->name);
|
||||
#ifdef CONFIG_NET_RX_BUSY_POLL
|
||||
__entry->napi_id = skb->napi_id;
|
||||
#else
|
||||
__entry->napi_id = 0;
|
||||
#endif
|
||||
__entry->queue_mapping = skb->queue_mapping;
|
||||
__entry->skbaddr = skb;
|
||||
__entry->vlan_tagged = vlan_tx_tag_present(skb);
|
||||
__entry->vlan_proto = ntohs(skb->vlan_proto);
|
||||
__entry->vlan_tci = vlan_tx_tag_get(skb);
|
||||
__entry->protocol = ntohs(skb->protocol);
|
||||
__entry->ip_summed = skb->ip_summed;
|
||||
__entry->rxhash = skb->rxhash;
|
||||
__entry->l4_rxhash = skb->l4_rxhash;
|
||||
__entry->len = skb->len;
|
||||
__entry->data_len = skb->data_len;
|
||||
__entry->truesize = skb->truesize;
|
||||
__entry->mac_header_valid = skb_mac_header_was_set(skb);
|
||||
__entry->mac_header = skb_mac_header(skb) - skb->data;
|
||||
__entry->nr_frags = skb_shinfo(skb)->nr_frags;
|
||||
__entry->gso_size = skb_shinfo(skb)->gso_size;
|
||||
__entry->gso_type = skb_shinfo(skb)->gso_type;
|
||||
),
|
||||
|
||||
TP_printk("dev=%s napi_id=%#x queue_mapping=%u skbaddr=%p vlan_tagged=%d vlan_proto=0x%04x vlan_tci=0x%04x protocol=0x%04x ip_summed=%d rxhash=0x%08x l4_rxhash=%d len=%u data_len=%u truesize=%u mac_header_valid=%d mac_header=%d nr_frags=%d gso_size=%d gso_type=%#x",
|
||||
__get_str(name), __entry->napi_id, __entry->queue_mapping,
|
||||
__entry->skbaddr, __entry->vlan_tagged, __entry->vlan_proto,
|
||||
__entry->vlan_tci, __entry->protocol, __entry->ip_summed,
|
||||
__entry->rxhash, __entry->l4_rxhash, __entry->len,
|
||||
__entry->data_len, __entry->truesize,
|
||||
__entry->mac_header_valid, __entry->mac_header,
|
||||
__entry->nr_frags, __entry->gso_size, __entry->gso_type)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_frags_entry,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(net_dev_rx_verbose_template, napi_gro_receive_entry,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(net_dev_rx_verbose_template, netif_receive_skb_entry,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_entry,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_ni_entry,
|
||||
|
||||
TP_PROTO(const struct sk_buff *skb),
|
||||
|
||||
TP_ARGS(skb)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_NET_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
Reference in New Issue
Block a user