1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun /* Copyright (c) 2018-2019 Hisilicon Limited. */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun /* This must be outside ifdef _HNS3_TRACE_H */ 5*4882a593Smuzhiyun #undef TRACE_SYSTEM 6*4882a593Smuzhiyun #define TRACE_SYSTEM hns3 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #if !defined(_HNS3_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 9*4882a593Smuzhiyun #define _HNS3_TRACE_H_ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/tracepoint.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define DESC_NR (sizeof(struct hns3_desc) / sizeof(u32)) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hns3_skb_template, 16*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 17*4882a593Smuzhiyun TP_ARGS(skb), 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun TP_STRUCT__entry( 20*4882a593Smuzhiyun __field(unsigned int, headlen) 21*4882a593Smuzhiyun __field(unsigned int, len) 22*4882a593Smuzhiyun __field(__u8, nr_frags) 23*4882a593Smuzhiyun __field(__u8, ip_summed) 24*4882a593Smuzhiyun __field(unsigned int, hdr_len) 25*4882a593Smuzhiyun __field(unsigned short, gso_size) 26*4882a593Smuzhiyun __field(unsigned short, gso_segs) 27*4882a593Smuzhiyun __field(unsigned int, gso_type) 28*4882a593Smuzhiyun __field(bool, fraglist) 29*4882a593Smuzhiyun __array(__u32, size, MAX_SKB_FRAGS) 30*4882a593Smuzhiyun ), 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun TP_fast_assign( 33*4882a593Smuzhiyun __entry->headlen = skb_headlen(skb); 34*4882a593Smuzhiyun __entry->len = skb->len; 35*4882a593Smuzhiyun __entry->nr_frags = skb_shinfo(skb)->nr_frags; 36*4882a593Smuzhiyun __entry->gso_size = skb_shinfo(skb)->gso_size; 37*4882a593Smuzhiyun __entry->gso_segs = skb_shinfo(skb)->gso_segs; 38*4882a593Smuzhiyun __entry->gso_type = skb_shinfo(skb)->gso_type; 39*4882a593Smuzhiyun __entry->hdr_len = skb->encapsulation ? 40*4882a593Smuzhiyun skb_inner_transport_offset(skb) + inner_tcp_hdrlen(skb) : 41*4882a593Smuzhiyun skb_transport_offset(skb) + tcp_hdrlen(skb); 42*4882a593Smuzhiyun __entry->ip_summed = skb->ip_summed; 43*4882a593Smuzhiyun __entry->fraglist = skb_has_frag_list(skb); 44*4882a593Smuzhiyun hns3_shinfo_pack(skb_shinfo(skb), __entry->size); 45*4882a593Smuzhiyun ), 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun TP_printk( 48*4882a593Smuzhiyun "len: %u, %u, %u, cs: %u, gso: %u, %u, %x, frag(%d %u): %s", 49*4882a593Smuzhiyun __entry->headlen, __entry->len, __entry->hdr_len, 50*4882a593Smuzhiyun __entry->ip_summed, __entry->gso_size, __entry->gso_segs, 51*4882a593Smuzhiyun __entry->gso_type, __entry->fraglist, __entry->nr_frags, 52*4882a593Smuzhiyun __print_array(__entry->size, MAX_SKB_FRAGS, sizeof(__u32)) 53*4882a593Smuzhiyun ) 54*4882a593Smuzhiyun ); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun DEFINE_EVENT(hns3_skb_template, hns3_over_max_bd, 57*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 58*4882a593Smuzhiyun TP_ARGS(skb)); 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun DEFINE_EVENT(hns3_skb_template, hns3_gro, 61*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 62*4882a593Smuzhiyun TP_ARGS(skb)); 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun DEFINE_EVENT(hns3_skb_template, hns3_tso, 65*4882a593Smuzhiyun TP_PROTO(struct sk_buff *skb), 66*4882a593Smuzhiyun TP_ARGS(skb)); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun TRACE_EVENT(hns3_tx_desc, 69*4882a593Smuzhiyun TP_PROTO(struct hns3_enet_ring *ring, int cur_ntu), 70*4882a593Smuzhiyun TP_ARGS(ring, cur_ntu), 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun TP_STRUCT__entry( 73*4882a593Smuzhiyun __field(int, index) 74*4882a593Smuzhiyun __field(int, ntu) 75*4882a593Smuzhiyun __field(int, ntc) 76*4882a593Smuzhiyun __field(dma_addr_t, desc_dma) 77*4882a593Smuzhiyun __array(u32, desc, DESC_NR) 78*4882a593Smuzhiyun __string(devname, ring->tqp->handle->kinfo.netdev->name) 79*4882a593Smuzhiyun ), 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun TP_fast_assign( 82*4882a593Smuzhiyun __entry->index = ring->tqp->tqp_index; 83*4882a593Smuzhiyun __entry->ntu = ring->next_to_use; 84*4882a593Smuzhiyun __entry->ntc = ring->next_to_clean; 85*4882a593Smuzhiyun __entry->desc_dma = ring->desc_dma_addr, 86*4882a593Smuzhiyun memcpy(__entry->desc, &ring->desc[cur_ntu], 87*4882a593Smuzhiyun sizeof(struct hns3_desc)); 88*4882a593Smuzhiyun __assign_str(devname, ring->tqp->handle->kinfo.netdev->name); 89*4882a593Smuzhiyun ), 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun TP_printk( 92*4882a593Smuzhiyun "%s-%d-%d/%d desc(%pad): %s", 93*4882a593Smuzhiyun __get_str(devname), __entry->index, __entry->ntu, 94*4882a593Smuzhiyun __entry->ntc, &__entry->desc_dma, 95*4882a593Smuzhiyun __print_array(__entry->desc, DESC_NR, sizeof(u32)) 96*4882a593Smuzhiyun ) 97*4882a593Smuzhiyun ); 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun TRACE_EVENT(hns3_rx_desc, 100*4882a593Smuzhiyun TP_PROTO(struct hns3_enet_ring *ring), 101*4882a593Smuzhiyun TP_ARGS(ring), 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun TP_STRUCT__entry( 104*4882a593Smuzhiyun __field(int, index) 105*4882a593Smuzhiyun __field(int, ntu) 106*4882a593Smuzhiyun __field(int, ntc) 107*4882a593Smuzhiyun __field(dma_addr_t, desc_dma) 108*4882a593Smuzhiyun __field(dma_addr_t, buf_dma) 109*4882a593Smuzhiyun __array(u32, desc, DESC_NR) 110*4882a593Smuzhiyun __string(devname, ring->tqp->handle->kinfo.netdev->name) 111*4882a593Smuzhiyun ), 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun TP_fast_assign( 114*4882a593Smuzhiyun __entry->index = ring->tqp->tqp_index; 115*4882a593Smuzhiyun __entry->ntu = ring->next_to_use; 116*4882a593Smuzhiyun __entry->ntc = ring->next_to_clean; 117*4882a593Smuzhiyun __entry->desc_dma = ring->desc_dma_addr; 118*4882a593Smuzhiyun __entry->buf_dma = ring->desc_cb[ring->next_to_clean].dma; 119*4882a593Smuzhiyun memcpy(__entry->desc, &ring->desc[ring->next_to_clean], 120*4882a593Smuzhiyun sizeof(struct hns3_desc)); 121*4882a593Smuzhiyun __assign_str(devname, ring->tqp->handle->kinfo.netdev->name); 122*4882a593Smuzhiyun ), 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun TP_printk( 125*4882a593Smuzhiyun "%s-%d-%d/%d desc(%pad) buf(%pad): %s", 126*4882a593Smuzhiyun __get_str(devname), __entry->index, __entry->ntu, 127*4882a593Smuzhiyun __entry->ntc, &__entry->desc_dma, &__entry->buf_dma, 128*4882a593Smuzhiyun __print_array(__entry->desc, DESC_NR, sizeof(u32)) 129*4882a593Smuzhiyun ) 130*4882a593Smuzhiyun ); 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun #endif /* _HNS3_TRACE_H_ */ 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun /* This must be outside ifdef _HNS3_TRACE_H */ 135*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 136*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 137*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 138*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE hns3_trace 139*4882a593Smuzhiyun #include <trace/define_trace.h> 140