| .. | .. |
|---|
| 53 | 53 | #include "hfi.h" |
|---|
| 54 | 54 | #include "mad.h" |
|---|
| 55 | 55 | #include "sdma.h" |
|---|
| 56 | +#include "ipoib.h" |
|---|
| 57 | +#include "user_sdma.h" |
|---|
| 56 | 58 | |
|---|
| 57 | 59 | const char *parse_sdma_flags(struct trace_seq *p, u64 desc0, u64 desc1); |
|---|
| 58 | 60 | |
|---|
| .. | .. |
|---|
| 114 | 116 | __field(u32, qpn) |
|---|
| 115 | 117 | __field(u32, flags) |
|---|
| 116 | 118 | __field(u32, s_flags) |
|---|
| 119 | + __field(u32, ps_flags) |
|---|
| 120 | + __field(unsigned long, iow_flags) |
|---|
| 117 | 121 | ), |
|---|
| 118 | 122 | TP_fast_assign( |
|---|
| 119 | 123 | DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) |
|---|
| 120 | 124 | __entry->flags = flags; |
|---|
| 121 | 125 | __entry->qpn = qp->ibqp.qp_num; |
|---|
| 122 | 126 | __entry->s_flags = qp->s_flags; |
|---|
| 127 | + __entry->ps_flags = |
|---|
| 128 | + ((struct hfi1_qp_priv *)qp->priv)->s_flags; |
|---|
| 129 | + __entry->iow_flags = |
|---|
| 130 | + ((struct hfi1_qp_priv *)qp->priv)->s_iowait.flags; |
|---|
| 123 | 131 | ), |
|---|
| 124 | 132 | TP_printk( |
|---|
| 125 | | - "[%s] qpn 0x%x flags 0x%x s_flags 0x%x", |
|---|
| 133 | + "[%s] qpn 0x%x flags 0x%x s_flags 0x%x ps_flags 0x%x iow_flags 0x%lx", |
|---|
| 126 | 134 | __get_str(dev), |
|---|
| 127 | 135 | __entry->qpn, |
|---|
| 128 | 136 | __entry->flags, |
|---|
| 129 | | - __entry->s_flags |
|---|
| 137 | + __entry->s_flags, |
|---|
| 138 | + __entry->ps_flags, |
|---|
| 139 | + __entry->iow_flags |
|---|
| 130 | 140 | ) |
|---|
| 131 | 141 | ); |
|---|
| 132 | 142 | |
|---|
| .. | .. |
|---|
| 580 | 590 | TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 *i), |
|---|
| 581 | 591 | TP_ARGS(dd, ctxt, subctxt, i), |
|---|
| 582 | 592 | TP_STRUCT__entry( |
|---|
| 583 | | - DD_DEV_ENTRY(dd); |
|---|
| 593 | + DD_DEV_ENTRY(dd) |
|---|
| 584 | 594 | __field(u16, ctxt) |
|---|
| 585 | 595 | __field(u8, subctxt) |
|---|
| 586 | 596 | __field(u8, ver_opcode) |
|---|
| .. | .. |
|---|
| 643 | 653 | __get_str(dev), __entry->ctxt, __entry->subctxt, |
|---|
| 644 | 654 | __entry->idx, show_usdma_complete_state(__entry->state), |
|---|
| 645 | 655 | __entry->code) |
|---|
| 656 | +); |
|---|
| 657 | + |
|---|
| 658 | +TRACE_EVENT(hfi1_usdma_defer, |
|---|
| 659 | + TP_PROTO(struct hfi1_user_sdma_pkt_q *pq, |
|---|
| 660 | + struct sdma_engine *sde, |
|---|
| 661 | + struct iowait *wait), |
|---|
| 662 | + TP_ARGS(pq, sde, wait), |
|---|
| 663 | + TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd) |
|---|
| 664 | + __field(struct hfi1_user_sdma_pkt_q *, pq) |
|---|
| 665 | + __field(struct sdma_engine *, sde) |
|---|
| 666 | + __field(struct iowait *, wait) |
|---|
| 667 | + __field(int, engine) |
|---|
| 668 | + __field(int, empty) |
|---|
| 669 | + ), |
|---|
| 670 | + TP_fast_assign(DD_DEV_ASSIGN(pq->dd); |
|---|
| 671 | + __entry->pq = pq; |
|---|
| 672 | + __entry->sde = sde; |
|---|
| 673 | + __entry->wait = wait; |
|---|
| 674 | + __entry->engine = sde->this_idx; |
|---|
| 675 | + __entry->empty = list_empty(&__entry->wait->list); |
|---|
| 676 | + ), |
|---|
| 677 | + TP_printk("[%s] pq %llx sde %llx wait %llx engine %d empty %d", |
|---|
| 678 | + __get_str(dev), |
|---|
| 679 | + (unsigned long long)__entry->pq, |
|---|
| 680 | + (unsigned long long)__entry->sde, |
|---|
| 681 | + (unsigned long long)__entry->wait, |
|---|
| 682 | + __entry->engine, |
|---|
| 683 | + __entry->empty |
|---|
| 684 | + ) |
|---|
| 685 | +); |
|---|
| 686 | + |
|---|
| 687 | +TRACE_EVENT(hfi1_usdma_activate, |
|---|
| 688 | + TP_PROTO(struct hfi1_user_sdma_pkt_q *pq, |
|---|
| 689 | + struct iowait *wait, |
|---|
| 690 | + int reason), |
|---|
| 691 | + TP_ARGS(pq, wait, reason), |
|---|
| 692 | + TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd) |
|---|
| 693 | + __field(struct hfi1_user_sdma_pkt_q *, pq) |
|---|
| 694 | + __field(struct iowait *, wait) |
|---|
| 695 | + __field(int, reason) |
|---|
| 696 | + ), |
|---|
| 697 | + TP_fast_assign(DD_DEV_ASSIGN(pq->dd); |
|---|
| 698 | + __entry->pq = pq; |
|---|
| 699 | + __entry->wait = wait; |
|---|
| 700 | + __entry->reason = reason; |
|---|
| 701 | + ), |
|---|
| 702 | + TP_printk("[%s] pq %llx wait %llx reason %d", |
|---|
| 703 | + __get_str(dev), |
|---|
| 704 | + (unsigned long long)__entry->pq, |
|---|
| 705 | + (unsigned long long)__entry->wait, |
|---|
| 706 | + __entry->reason |
|---|
| 707 | + ) |
|---|
| 708 | +); |
|---|
| 709 | + |
|---|
| 710 | +TRACE_EVENT(hfi1_usdma_we, |
|---|
| 711 | + TP_PROTO(struct hfi1_user_sdma_pkt_q *pq, |
|---|
| 712 | + int we_ret), |
|---|
| 713 | + TP_ARGS(pq, we_ret), |
|---|
| 714 | + TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd) |
|---|
| 715 | + __field(struct hfi1_user_sdma_pkt_q *, pq) |
|---|
| 716 | + __field(int, state) |
|---|
| 717 | + __field(int, we_ret) |
|---|
| 718 | + ), |
|---|
| 719 | + TP_fast_assign(DD_DEV_ASSIGN(pq->dd); |
|---|
| 720 | + __entry->pq = pq; |
|---|
| 721 | + __entry->state = pq->state; |
|---|
| 722 | + __entry->we_ret = we_ret; |
|---|
| 723 | + ), |
|---|
| 724 | + TP_printk("[%s] pq %llx state %d we_ret %d", |
|---|
| 725 | + __get_str(dev), |
|---|
| 726 | + (unsigned long long)__entry->pq, |
|---|
| 727 | + __entry->state, |
|---|
| 728 | + __entry->we_ret |
|---|
| 729 | + ) |
|---|
| 646 | 730 | ); |
|---|
| 647 | 731 | |
|---|
| 648 | 732 | const char *print_u32_array(struct trace_seq *, u32 *, int); |
|---|
| .. | .. |
|---|
| 838 | 922 | TP_ARGS(qp, flag) |
|---|
| 839 | 923 | ); |
|---|
| 840 | 924 | |
|---|
| 925 | +DEFINE_EVENT(/* event */ |
|---|
| 926 | + hfi1_do_send_template, hfi1_rc_do_tid_send, |
|---|
| 927 | + TP_PROTO(struct rvt_qp *qp, bool flag), |
|---|
| 928 | + TP_ARGS(qp, flag) |
|---|
| 929 | +); |
|---|
| 930 | + |
|---|
| 841 | 931 | DEFINE_EVENT( |
|---|
| 842 | 932 | hfi1_do_send_template, hfi1_rc_expired_time_slice, |
|---|
| 843 | 933 | TP_PROTO(struct rvt_qp *qp, bool flag), |
|---|
| 844 | 934 | TP_ARGS(qp, flag) |
|---|
| 845 | 935 | ); |
|---|
| 846 | 936 | |
|---|
| 937 | +DECLARE_EVENT_CLASS(/* AIP */ |
|---|
| 938 | + hfi1_ipoib_txq_template, |
|---|
| 939 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 940 | + TP_ARGS(txq), |
|---|
| 941 | + TP_STRUCT__entry(/* entry */ |
|---|
| 942 | + DD_DEV_ENTRY(txq->priv->dd) |
|---|
| 943 | + __field(struct hfi1_ipoib_txq *, txq) |
|---|
| 944 | + __field(struct sdma_engine *, sde) |
|---|
| 945 | + __field(ulong, head) |
|---|
| 946 | + __field(ulong, tail) |
|---|
| 947 | + __field(uint, used) |
|---|
| 948 | + __field(uint, flow) |
|---|
| 949 | + __field(int, stops) |
|---|
| 950 | + __field(int, no_desc) |
|---|
| 951 | + __field(u8, idx) |
|---|
| 952 | + __field(u8, stopped) |
|---|
| 953 | + ), |
|---|
| 954 | + TP_fast_assign(/* assign */ |
|---|
| 955 | + DD_DEV_ASSIGN(txq->priv->dd) |
|---|
| 956 | + __entry->txq = txq; |
|---|
| 957 | + __entry->sde = txq->sde; |
|---|
| 958 | + __entry->head = txq->tx_ring.head; |
|---|
| 959 | + __entry->tail = txq->tx_ring.tail; |
|---|
| 960 | + __entry->idx = txq->q_idx; |
|---|
| 961 | + __entry->used = |
|---|
| 962 | + txq->sent_txreqs - |
|---|
| 963 | + atomic64_read(&txq->complete_txreqs); |
|---|
| 964 | + __entry->flow = txq->flow.as_int; |
|---|
| 965 | + __entry->stops = atomic_read(&txq->stops); |
|---|
| 966 | + __entry->no_desc = atomic_read(&txq->no_desc); |
|---|
| 967 | + __entry->stopped = |
|---|
| 968 | + __netif_subqueue_stopped(txq->priv->netdev, txq->q_idx); |
|---|
| 969 | + ), |
|---|
| 970 | + TP_printk(/* print */ |
|---|
| 971 | + "[%s] txq %llx idx %u sde %llx head %lx tail %lx flow %x used %u stops %d no_desc %d stopped %u", |
|---|
| 972 | + __get_str(dev), |
|---|
| 973 | + (unsigned long long)__entry->txq, |
|---|
| 974 | + __entry->idx, |
|---|
| 975 | + (unsigned long long)__entry->sde, |
|---|
| 976 | + __entry->head, |
|---|
| 977 | + __entry->tail, |
|---|
| 978 | + __entry->flow, |
|---|
| 979 | + __entry->used, |
|---|
| 980 | + __entry->stops, |
|---|
| 981 | + __entry->no_desc, |
|---|
| 982 | + __entry->stopped |
|---|
| 983 | + ) |
|---|
| 984 | +); |
|---|
| 985 | + |
|---|
| 986 | +DEFINE_EVENT(/* queue stop */ |
|---|
| 987 | + hfi1_ipoib_txq_template, hfi1_txq_stop, |
|---|
| 988 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 989 | + TP_ARGS(txq) |
|---|
| 990 | +); |
|---|
| 991 | + |
|---|
| 992 | +DEFINE_EVENT(/* queue wake */ |
|---|
| 993 | + hfi1_ipoib_txq_template, hfi1_txq_wake, |
|---|
| 994 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 995 | + TP_ARGS(txq) |
|---|
| 996 | +); |
|---|
| 997 | + |
|---|
| 998 | +DEFINE_EVENT(/* flow flush */ |
|---|
| 999 | + hfi1_ipoib_txq_template, hfi1_flow_flush, |
|---|
| 1000 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1001 | + TP_ARGS(txq) |
|---|
| 1002 | +); |
|---|
| 1003 | + |
|---|
| 1004 | +DEFINE_EVENT(/* flow switch */ |
|---|
| 1005 | + hfi1_ipoib_txq_template, hfi1_flow_switch, |
|---|
| 1006 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1007 | + TP_ARGS(txq) |
|---|
| 1008 | +); |
|---|
| 1009 | + |
|---|
| 1010 | +DEFINE_EVENT(/* wakeup */ |
|---|
| 1011 | + hfi1_ipoib_txq_template, hfi1_txq_wakeup, |
|---|
| 1012 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1013 | + TP_ARGS(txq) |
|---|
| 1014 | +); |
|---|
| 1015 | + |
|---|
| 1016 | +DEFINE_EVENT(/* full */ |
|---|
| 1017 | + hfi1_ipoib_txq_template, hfi1_txq_full, |
|---|
| 1018 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1019 | + TP_ARGS(txq) |
|---|
| 1020 | +); |
|---|
| 1021 | + |
|---|
| 1022 | +DEFINE_EVENT(/* queued */ |
|---|
| 1023 | + hfi1_ipoib_txq_template, hfi1_txq_queued, |
|---|
| 1024 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1025 | + TP_ARGS(txq) |
|---|
| 1026 | +); |
|---|
| 1027 | + |
|---|
| 1028 | +DEFINE_EVENT(/* xmit_stopped */ |
|---|
| 1029 | + hfi1_ipoib_txq_template, hfi1_txq_xmit_stopped, |
|---|
| 1030 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1031 | + TP_ARGS(txq) |
|---|
| 1032 | +); |
|---|
| 1033 | + |
|---|
| 1034 | +DEFINE_EVENT(/* xmit_unstopped */ |
|---|
| 1035 | + hfi1_ipoib_txq_template, hfi1_txq_xmit_unstopped, |
|---|
| 1036 | + TP_PROTO(struct hfi1_ipoib_txq *txq), |
|---|
| 1037 | + TP_ARGS(txq) |
|---|
| 1038 | +); |
|---|
| 1039 | + |
|---|
| 847 | 1040 | #endif /* __HFI1_TRACE_TX_H */ |
|---|
| 848 | 1041 | |
|---|
| 849 | 1042 | #undef TRACE_INCLUDE_PATH |
|---|