diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index 18c14c3125c9fa71f66b6cf838728ed6aec5e44e..d224ead337c2df1622f2abecba0ff18492e0ef46 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -717,6 +717,8 @@ static int hns3_set_tso(struct sk_buff *skb, u32 *paylen, /* get MSS for TSO */ *mss = skb_shinfo(skb)->gso_size; + trace_hns3_tso(skb); + return 0; } @@ -1235,10 +1237,10 @@ static int hns3_nic_maybe_stop_tx(struct hns3_enet_ring *ring, if (unlikely(bd_num > HNS3_MAX_BD_PER_FRAG)) { struct sk_buff *new_skb; - if (skb_is_gso(skb) && !hns3_skb_need_linearized(skb)) + if (skb_is_gso(skb) && !hns3_skb_need_linearized(skb)) { + trace_hns3_over_8bd(skb); goto out; - - trace_hns3_over_8bd(skb); + } bd_num = hns3_tx_bd_count(skb->len); if (unlikely(ring_space(ring) < bd_num)) @@ -2506,6 +2508,9 @@ static int hns3_gro_complete(struct sk_buff *skb, u32 l234info) skb->csum_start = (unsigned char *)th - skb->head; skb->csum_offset = offsetof(struct tcphdr, check); skb->ip_summed = CHECKSUM_PARTIAL; + + trace_hns3_gro(skb); + return 0; } diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_trace.h b/drivers/net/ethernet/hisilicon/hns3/hns3_trace.h index 6f10b85332b66c8f91e4d03886798cd894bf31ac..8e4d9c06c95508b4cc57cab0502da61f33d2ca84 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_trace.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_trace.h @@ -11,31 +11,57 @@ #define DESC_NR (sizeof(struct hns3_desc) / sizeof(u32)) -TRACE_EVENT(hns3_over_8bd, +DECLARE_EVENT_CLASS(hns3_skb_template, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb), TP_STRUCT__entry( __field(unsigned int, headlen) + __field(unsigned int, len) __field(__u8, nr_frags) + __field(__u8, ip_summed) + __field(unsigned int, hdr_len) __field(unsigned short, gso_size) + __field(unsigned short, gso_segs) + __field(unsigned int, gso_type) __array(__u32, size, MAX_SKB_FRAGS) ), TP_fast_assign( __entry->headlen = skb_headlen(skb); + __entry->len = skb->len; __entry->nr_frags = skb_shinfo(skb)->nr_frags; __entry->gso_size = skb_shinfo(skb)->gso_size; + __entry->gso_segs = skb_shinfo(skb)->gso_segs; + __entry->gso_type = skb_shinfo(skb)->gso_type; + __entry->hdr_len = skb->encapsulation ? + skb_inner_transport_offset(skb) + inner_tcp_hdrlen(skb) : + skb_transport_offset(skb) + tcp_hdrlen(skb); + __entry->ip_summed = skb->ip_summed; hns3_shinfo_pack(skb_shinfo(skb), __entry->size); ), TP_printk( - "headlen: %u, nr_frags: %u, gso: %u frag size: %s", - __entry->headlen, __entry->gso_size, __entry->nr_frags, + "len: %u, %u, %u, cs: %u, gso: %u, %u, %x, frag(%u): %s", + __entry->headlen, __entry->len, __entry->hdr_len, + __entry->ip_summed, __entry->gso_size, __entry->gso_segs, + __entry->gso_type, __entry->nr_frags, __print_array(__entry->size, MAX_SKB_FRAGS, sizeof(__u32)) ) ); +DEFINE_EVENT(hns3_skb_template, hns3_over_8bd, + TP_PROTO(struct sk_buff *skb), + TP_ARGS(skb)); + +DEFINE_EVENT(hns3_skb_template, hns3_gro, + TP_PROTO(struct sk_buff *skb), + TP_ARGS(skb)); + +DEFINE_EVENT(hns3_skb_template, hns3_tso, + TP_PROTO(struct sk_buff *skb), + TP_ARGS(skb)); + TRACE_EVENT(hns3_tx_desc, TP_PROTO(struct hns3_enet_ring *ring), TP_ARGS(ring),