提交 4165a2d1 编写于 作者: L linyunsheng 提交者: Xie XiuQi

net: hns3: add trace events support for hns3 driver

driver inclusion
category: bugfix
bugzilla: NA
CVE: NA

change for hns3 trace to debug tso and gro problem

Feature or Bugfix:Bugfix
Signed-off-by: NYunsheng Lin <linyunsheng@huawei.com>
Reviewed-by: Nlipeng <lipeng321@huawei.com>
Reviewed-by: NYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 8b206623
...@@ -717,6 +717,8 @@ static int hns3_set_tso(struct sk_buff *skb, u32 *paylen, ...@@ -717,6 +717,8 @@ static int hns3_set_tso(struct sk_buff *skb, u32 *paylen,
/* get MSS for TSO */ /* get MSS for TSO */
*mss = skb_shinfo(skb)->gso_size; *mss = skb_shinfo(skb)->gso_size;
trace_hns3_tso(skb);
return 0; return 0;
} }
...@@ -1235,10 +1237,10 @@ static int hns3_nic_maybe_stop_tx(struct hns3_enet_ring *ring, ...@@ -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)) { if (unlikely(bd_num > HNS3_MAX_BD_PER_FRAG)) {
struct sk_buff *new_skb; 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; goto out;
}
trace_hns3_over_8bd(skb);
bd_num = hns3_tx_bd_count(skb->len); bd_num = hns3_tx_bd_count(skb->len);
if (unlikely(ring_space(ring) < bd_num)) if (unlikely(ring_space(ring) < bd_num))
...@@ -2506,6 +2508,9 @@ static int hns3_gro_complete(struct sk_buff *skb, u32 l234info) ...@@ -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_start = (unsigned char *)th - skb->head;
skb->csum_offset = offsetof(struct tcphdr, check); skb->csum_offset = offsetof(struct tcphdr, check);
skb->ip_summed = CHECKSUM_PARTIAL; skb->ip_summed = CHECKSUM_PARTIAL;
trace_hns3_gro(skb);
return 0; return 0;
} }
......
...@@ -11,31 +11,57 @@ ...@@ -11,31 +11,57 @@
#define DESC_NR (sizeof(struct hns3_desc) / sizeof(u32)) #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_PROTO(struct sk_buff *skb),
TP_ARGS(skb), TP_ARGS(skb),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(unsigned int, headlen) __field(unsigned int, headlen)
__field(unsigned int, len)
__field(__u8, nr_frags) __field(__u8, nr_frags)
__field(__u8, ip_summed)
__field(unsigned int, hdr_len)
__field(unsigned short, gso_size) __field(unsigned short, gso_size)
__field(unsigned short, gso_segs)
__field(unsigned int, gso_type)
__array(__u32, size, MAX_SKB_FRAGS) __array(__u32, size, MAX_SKB_FRAGS)
), ),
TP_fast_assign( TP_fast_assign(
__entry->headlen = skb_headlen(skb); __entry->headlen = skb_headlen(skb);
__entry->len = skb->len;
__entry->nr_frags = skb_shinfo(skb)->nr_frags; __entry->nr_frags = skb_shinfo(skb)->nr_frags;
__entry->gso_size = skb_shinfo(skb)->gso_size; __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); hns3_shinfo_pack(skb_shinfo(skb), __entry->size);
), ),
TP_printk( TP_printk(
"headlen: %u, nr_frags: %u, gso: %u frag size: %s", "len: %u, %u, %u, cs: %u, gso: %u, %u, %x, frag(%u): %s",
__entry->headlen, __entry->gso_size, __entry->nr_frags, __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)) __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, TRACE_EVENT(hns3_tx_desc,
TP_PROTO(struct hns3_enet_ring *ring), TP_PROTO(struct hns3_enet_ring *ring),
TP_ARGS(ring), TP_ARGS(ring),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册