rxrpc: Trace/count transmission underflows and cwnd resets
[linux-block.git] / include / trace / events / rxrpc.h
index d20bf4aa0204b7a2f370211cdcc8c9d7f6231a93..b41e913ae78a5628b83985fa04ee1c20366371f3 100644 (file)
 /*
  * Declare tracing information enums and their string mappings for display.
  */
+#define rxrpc_call_poke_traces \
+       EM(rxrpc_call_poke_error,               "Error")        \
+       EM(rxrpc_call_poke_idle,                "Idle")         \
+       EM(rxrpc_call_poke_start,               "Start")        \
+       EM(rxrpc_call_poke_timer,               "Timer")        \
+       E_(rxrpc_call_poke_timer_now,           "Timer-now")
+
 #define rxrpc_skb_traces \
-       EM(rxrpc_skb_cleaned,                   "CLN") \
-       EM(rxrpc_skb_freed,                     "FRE") \
-       EM(rxrpc_skb_got,                       "GOT") \
-       EM(rxrpc_skb_lost,                      "*L*") \
-       EM(rxrpc_skb_new,                       "NEW") \
-       EM(rxrpc_skb_purged,                    "PUR") \
-       EM(rxrpc_skb_received,                  "RCV") \
-       EM(rxrpc_skb_rotated,                   "ROT") \
-       EM(rxrpc_skb_seen,                      "SEE") \
-       EM(rxrpc_skb_unshared,                  "UNS") \
-       E_(rxrpc_skb_unshared_nomem,            "US0")
+       EM(rxrpc_skb_eaten_by_unshare,          "ETN unshare  ") \
+       EM(rxrpc_skb_eaten_by_unshare_nomem,    "ETN unshar-nm") \
+       EM(rxrpc_skb_get_conn_work,             "GET conn-work") \
+       EM(rxrpc_skb_get_local_work,            "GET locl-work") \
+       EM(rxrpc_skb_get_reject_work,           "GET rej-work ") \
+       EM(rxrpc_skb_get_to_recvmsg,            "GET to-recv  ") \
+       EM(rxrpc_skb_get_to_recvmsg_oos,        "GET to-recv-o") \
+       EM(rxrpc_skb_new_encap_rcv,             "NEW encap-rcv") \
+       EM(rxrpc_skb_new_error_report,          "NEW error-rpt") \
+       EM(rxrpc_skb_new_jumbo_subpacket,       "NEW jumbo-sub") \
+       EM(rxrpc_skb_new_unshared,              "NEW unshared ") \
+       EM(rxrpc_skb_put_conn_work,             "PUT conn-work") \
+       EM(rxrpc_skb_put_error_report,          "PUT error-rep") \
+       EM(rxrpc_skb_put_input,                 "PUT input    ") \
+       EM(rxrpc_skb_put_jumbo_subpacket,       "PUT jumbo-sub") \
+       EM(rxrpc_skb_put_purge,                 "PUT purge    ") \
+       EM(rxrpc_skb_put_rotate,                "PUT rotate   ") \
+       EM(rxrpc_skb_put_unknown,               "PUT unknown  ") \
+       EM(rxrpc_skb_see_conn_work,             "SEE conn-work") \
+       EM(rxrpc_skb_see_recvmsg,               "SEE recvmsg  ") \
+       EM(rxrpc_skb_see_reject,                "SEE reject   ") \
+       EM(rxrpc_skb_see_rotate,                "SEE rotate   ") \
+       E_(rxrpc_skb_see_version,               "SEE version  ")
 
 #define rxrpc_local_traces \
-       EM(rxrpc_local_got,                     "GOT") \
-       EM(rxrpc_local_new,                     "NEW") \
-       EM(rxrpc_local_processing,              "PRO") \
-       EM(rxrpc_local_put,                     "PUT") \
-       E_(rxrpc_local_queued,                  "QUE")
+       EM(rxrpc_local_free,                    "FREE        ") \
+       EM(rxrpc_local_get_call,                "GET call    ") \
+       EM(rxrpc_local_get_client_conn,         "GET conn-cln") \
+       EM(rxrpc_local_get_for_use,             "GET for-use ") \
+       EM(rxrpc_local_get_peer,                "GET peer    ") \
+       EM(rxrpc_local_get_prealloc_conn,       "GET conn-pre") \
+       EM(rxrpc_local_new,                     "NEW         ") \
+       EM(rxrpc_local_put_bind,                "PUT bind    ") \
+       EM(rxrpc_local_put_call,                "PUT call    ") \
+       EM(rxrpc_local_put_for_use,             "PUT for-use ") \
+       EM(rxrpc_local_put_kill_conn,           "PUT conn-kil") \
+       EM(rxrpc_local_put_peer,                "PUT peer    ") \
+       EM(rxrpc_local_put_prealloc_conn,       "PUT conn-pre") \
+       EM(rxrpc_local_put_release_sock,        "PUT rel-sock") \
+       EM(rxrpc_local_see_tx_ack,              "SEE tx-ack  ") \
+       EM(rxrpc_local_stop,                    "STOP        ") \
+       EM(rxrpc_local_stopped,                 "STOPPED     ") \
+       EM(rxrpc_local_unuse_bind,              "UNU bind    ") \
+       EM(rxrpc_local_unuse_conn_work,         "UNU conn-wrk") \
+       EM(rxrpc_local_unuse_peer_keepalive,    "UNU peer-kpa") \
+       EM(rxrpc_local_unuse_release_sock,      "UNU rel-sock") \
+       EM(rxrpc_local_use_conn_work,           "USE conn-wrk") \
+       EM(rxrpc_local_use_lookup,              "USE lookup  ") \
+       E_(rxrpc_local_use_peer_keepalive,      "USE peer-kpa")
 
 #define rxrpc_peer_traces \
-       EM(rxrpc_peer_got,                      "GOT") \
-       EM(rxrpc_peer_new,                      "NEW") \
-       EM(rxrpc_peer_processing,               "PRO") \
-       E_(rxrpc_peer_put,                      "PUT")
+       EM(rxrpc_peer_free,                     "FREE        ") \
+       EM(rxrpc_peer_get_accept,               "GET accept  ") \
+       EM(rxrpc_peer_get_activate_call,        "GET act-call") \
+       EM(rxrpc_peer_get_bundle,               "GET bundle  ") \
+       EM(rxrpc_peer_get_client_conn,          "GET cln-conn") \
+       EM(rxrpc_peer_get_input,                "GET input   ") \
+       EM(rxrpc_peer_get_input_error,          "GET inpt-err") \
+       EM(rxrpc_peer_get_keepalive,            "GET keepaliv") \
+       EM(rxrpc_peer_get_lookup_client,        "GET look-cln") \
+       EM(rxrpc_peer_get_service_conn,         "GET srv-conn") \
+       EM(rxrpc_peer_new_client,               "NEW client  ") \
+       EM(rxrpc_peer_new_prealloc,             "NEW prealloc") \
+       EM(rxrpc_peer_put_bundle,               "PUT bundle  ") \
+       EM(rxrpc_peer_put_call,                 "PUT call    ") \
+       EM(rxrpc_peer_put_conn,                 "PUT conn    ") \
+       EM(rxrpc_peer_put_discard_tmp,          "PUT disc-tmp") \
+       EM(rxrpc_peer_put_input,                "PUT input   ") \
+       EM(rxrpc_peer_put_input_error,          "PUT inpt-err") \
+       E_(rxrpc_peer_put_keepalive,            "PUT keepaliv")
+
+#define rxrpc_bundle_traces \
+       EM(rxrpc_bundle_free,                   "FREE        ") \
+       EM(rxrpc_bundle_get_client_call,        "GET clt-call") \
+       EM(rxrpc_bundle_get_client_conn,        "GET clt-conn") \
+       EM(rxrpc_bundle_get_service_conn,       "GET svc-conn") \
+       EM(rxrpc_bundle_put_conn,               "PUT conn    ") \
+       EM(rxrpc_bundle_put_discard,            "PUT discard ") \
+       E_(rxrpc_bundle_new,                    "NEW         ")
 
 #define rxrpc_conn_traces \
-       EM(rxrpc_conn_got,                      "GOT") \
-       EM(rxrpc_conn_new_client,               "NWc") \
-       EM(rxrpc_conn_new_service,              "NWs") \
-       EM(rxrpc_conn_put_client,               "PTc") \
-       EM(rxrpc_conn_put_service,              "PTs") \
-       EM(rxrpc_conn_queued,                   "QUE") \
-       EM(rxrpc_conn_reap_service,             "RPs") \
-       E_(rxrpc_conn_seen,                     "SEE")
+       EM(rxrpc_conn_free,                     "FREE        ") \
+       EM(rxrpc_conn_get_activate_call,        "GET act-call") \
+       EM(rxrpc_conn_get_call_input,           "GET inp-call") \
+       EM(rxrpc_conn_get_conn_input,           "GET inp-conn") \
+       EM(rxrpc_conn_get_idle,                 "GET idle    ") \
+       EM(rxrpc_conn_get_poke,                 "GET poke    ") \
+       EM(rxrpc_conn_get_service_conn,         "GET svc-conn") \
+       EM(rxrpc_conn_new_client,               "NEW client  ") \
+       EM(rxrpc_conn_new_service,              "NEW service ") \
+       EM(rxrpc_conn_put_call,                 "PUT call    ") \
+       EM(rxrpc_conn_put_call_input,           "PUT inp-call") \
+       EM(rxrpc_conn_put_conn_input,           "PUT inp-conn") \
+       EM(rxrpc_conn_put_discard,              "PUT discard ") \
+       EM(rxrpc_conn_put_discard_idle,         "PUT disc-idl") \
+       EM(rxrpc_conn_put_local_dead,           "PUT loc-dead") \
+       EM(rxrpc_conn_put_noreuse,              "PUT noreuse ") \
+       EM(rxrpc_conn_put_poke,                 "PUT poke    ") \
+       EM(rxrpc_conn_put_service_reaped,       "PUT svc-reap") \
+       EM(rxrpc_conn_put_unbundle,             "PUT unbundle") \
+       EM(rxrpc_conn_put_unidle,               "PUT unidle  ") \
+       EM(rxrpc_conn_queue_challenge,          "QUE chall   ") \
+       EM(rxrpc_conn_queue_retry_work,         "QUE retry-wk") \
+       EM(rxrpc_conn_queue_rx_work,            "QUE rx-work ") \
+       EM(rxrpc_conn_queue_timer,              "QUE timer   ") \
+       EM(rxrpc_conn_see_new_service_conn,     "SEE new-svc ") \
+       EM(rxrpc_conn_see_reap_service,         "SEE reap-svc") \
+       E_(rxrpc_conn_see_work,                 "SEE work    ")
 
 #define rxrpc_client_traces \
        EM(rxrpc_client_activate_chans,         "Activa") \
        E_(rxrpc_client_to_idle,                "->Idle")
 
 #define rxrpc_call_traces \
-       EM(rxrpc_call_connected,                "CON") \
-       EM(rxrpc_call_error,                    "*E*") \
-       EM(rxrpc_call_got,                      "GOT") \
-       EM(rxrpc_call_got_kernel,               "Gke") \
-       EM(rxrpc_call_got_timer,                "GTM") \
-       EM(rxrpc_call_got_userid,               "Gus") \
-       EM(rxrpc_call_new_client,               "NWc") \
-       EM(rxrpc_call_new_service,              "NWs") \
-       EM(rxrpc_call_put,                      "PUT") \
-       EM(rxrpc_call_put_kernel,               "Pke") \
-       EM(rxrpc_call_put_noqueue,              "PnQ") \
-       EM(rxrpc_call_put_notimer,              "PnT") \
-       EM(rxrpc_call_put_timer,                "PTM") \
-       EM(rxrpc_call_put_userid,               "Pus") \
-       EM(rxrpc_call_queued,                   "QUE") \
-       EM(rxrpc_call_queued_ref,               "QUR") \
-       EM(rxrpc_call_release,                  "RLS") \
-       E_(rxrpc_call_seen,                     "SEE")
-
-#define rxrpc_transmit_traces \
-       EM(rxrpc_transmit_await_reply,          "AWR") \
-       EM(rxrpc_transmit_end,                  "END") \
-       EM(rxrpc_transmit_queue,                "QUE") \
-       EM(rxrpc_transmit_queue_last,           "QLS") \
-       EM(rxrpc_transmit_rotate,               "ROT") \
-       EM(rxrpc_transmit_rotate_last,          "RLS") \
-       E_(rxrpc_transmit_wait,                 "WAI")
+       EM(rxrpc_call_get_input,                "GET input   ") \
+       EM(rxrpc_call_get_kernel_service,       "GET krnl-srv") \
+       EM(rxrpc_call_get_notify_socket,        "GET notify  ") \
+       EM(rxrpc_call_get_poke,                 "GET poke    ") \
+       EM(rxrpc_call_get_recvmsg,              "GET recvmsg ") \
+       EM(rxrpc_call_get_release_sock,         "GET rel-sock") \
+       EM(rxrpc_call_get_sendmsg,              "GET sendmsg ") \
+       EM(rxrpc_call_get_send_ack,             "GET send-ack") \
+       EM(rxrpc_call_get_userid,               "GET user-id ") \
+       EM(rxrpc_call_new_client,               "NEW client  ") \
+       EM(rxrpc_call_new_prealloc_service,     "NEW prealloc") \
+       EM(rxrpc_call_put_discard_prealloc,     "PUT disc-pre") \
+       EM(rxrpc_call_put_discard_error,        "PUT disc-err") \
+       EM(rxrpc_call_put_input,                "PUT input   ") \
+       EM(rxrpc_call_put_kernel,               "PUT kernel  ") \
+       EM(rxrpc_call_put_poke,                 "PUT poke    ") \
+       EM(rxrpc_call_put_recvmsg,              "PUT recvmsg ") \
+       EM(rxrpc_call_put_release_sock,         "PUT rls-sock") \
+       EM(rxrpc_call_put_release_sock_tba,     "PUT rls-sk-a") \
+       EM(rxrpc_call_put_send_ack,             "PUT send-ack") \
+       EM(rxrpc_call_put_sendmsg,              "PUT sendmsg ") \
+       EM(rxrpc_call_put_unnotify,             "PUT unnotify") \
+       EM(rxrpc_call_put_userid_exists,        "PUT u-exists") \
+       EM(rxrpc_call_see_accept,               "SEE accept  ") \
+       EM(rxrpc_call_see_activate_client,      "SEE act-clnt") \
+       EM(rxrpc_call_see_connect_failed,       "SEE con-fail") \
+       EM(rxrpc_call_see_connected,            "SEE connect ") \
+       EM(rxrpc_call_see_distribute_error,     "SEE dist-err") \
+       EM(rxrpc_call_see_input,                "SEE input   ") \
+       EM(rxrpc_call_see_release,              "SEE release ") \
+       EM(rxrpc_call_see_userid_exists,        "SEE u-exists") \
+       E_(rxrpc_call_see_zap,                  "SEE zap     ")
+
+#define rxrpc_txqueue_traces \
+       EM(rxrpc_txqueue_await_reply,           "AWR") \
+       EM(rxrpc_txqueue_dequeue,               "DEQ") \
+       EM(rxrpc_txqueue_end,                   "END") \
+       EM(rxrpc_txqueue_queue,                 "QUE") \
+       EM(rxrpc_txqueue_queue_last,            "QLS") \
+       EM(rxrpc_txqueue_rotate,                "ROT") \
+       EM(rxrpc_txqueue_rotate_last,           "RLS") \
+       E_(rxrpc_txqueue_wait,                  "WAI")
 
 #define rxrpc_receive_traces \
        EM(rxrpc_receive_end,                   "END") \
        EM(rxrpc_receive_incoming,              "INC") \
        EM(rxrpc_receive_queue,                 "QUE") \
        EM(rxrpc_receive_queue_last,            "QLS") \
-       E_(rxrpc_receive_rotate,                "ROT")
+       EM(rxrpc_receive_queue_oos,             "QUO") \
+       EM(rxrpc_receive_queue_oos_last,        "QOL") \
+       EM(rxrpc_receive_oos,                   "OOS") \
+       EM(rxrpc_receive_oos_last,              "OSL") \
+       EM(rxrpc_receive_rotate,                "ROT") \
+       E_(rxrpc_receive_rotate_last,           "RLS")
 
 #define rxrpc_recvmsg_traces \
        EM(rxrpc_recvmsg_cont,                  "CONT") \
 
 #define rxrpc_timer_traces \
        EM(rxrpc_timer_begin,                   "Begin ") \
-       EM(rxrpc_timer_expired,                 "*EXPR*") \
        EM(rxrpc_timer_exp_ack,                 "ExpAck") \
        EM(rxrpc_timer_exp_hard,                "ExpHrd") \
        EM(rxrpc_timer_exp_idle,                "ExpIdl") \
 #define rxrpc_propose_ack_traces \
        EM(rxrpc_propose_ack_client_tx_end,     "ClTxEnd") \
        EM(rxrpc_propose_ack_input_data,        "DataIn ") \
+       EM(rxrpc_propose_ack_input_data_hole,   "DataInH") \
        EM(rxrpc_propose_ack_ping_for_check_life, "ChkLife") \
        EM(rxrpc_propose_ack_ping_for_keepalive, "KeepAlv") \
        EM(rxrpc_propose_ack_ping_for_lost_ack, "LostAck") \
        EM(rxrpc_propose_ack_respond_to_ping,   "Rsp2Png") \
        EM(rxrpc_propose_ack_retry_tx,          "RetryTx") \
        EM(rxrpc_propose_ack_rotate_rx,         "RxAck  ") \
+       EM(rxrpc_propose_ack_rx_idle,           "RxIdle ") \
        E_(rxrpc_propose_ack_terminal_ack,      "ClTerm ")
 
-#define rxrpc_propose_ack_outcomes \
-       EM(rxrpc_propose_ack_subsume,           " Subsume") \
-       EM(rxrpc_propose_ack_update,            " Update") \
-       E_(rxrpc_propose_ack_use,               " New")
-
 #define rxrpc_congest_modes \
        EM(RXRPC_CALL_CONGEST_AVOIDANCE,        "CongAvoid") \
        EM(RXRPC_CALL_FAST_RETRANSMIT,          "FastReTx ") \
        EM(rxrpc_cong_new_low_nack,             " NewLowN") \
        EM(rxrpc_cong_no_change,                " -") \
        EM(rxrpc_cong_progress,                 " Progres") \
+       EM(rxrpc_cong_idle_reset,               " IdleRes") \
        EM(rxrpc_cong_retransmit_again,         " ReTxAgn") \
        EM(rxrpc_cong_rtt_window_end,           " RttWinE") \
        E_(rxrpc_cong_saw_nack,                 " SawNack")
        EM(rxrpc_tx_point_version_keepalive,    "VerKeepalive") \
        E_(rxrpc_tx_point_version_reply,        "VerReply")
 
+#define rxrpc_req_ack_traces \
+       EM(rxrpc_reqack_ack_lost,               "ACK-LOST  ")   \
+       EM(rxrpc_reqack_already_on,             "ALREADY-ON")   \
+       EM(rxrpc_reqack_more_rtt,               "MORE-RTT  ")   \
+       EM(rxrpc_reqack_no_srv_last,            "NO-SRVLAST")   \
+       EM(rxrpc_reqack_old_rtt,                "OLD-RTT   ")   \
+       EM(rxrpc_reqack_retrans,                "RETRANS   ")   \
+       EM(rxrpc_reqack_slow_start,             "SLOW-START")   \
+       E_(rxrpc_reqack_small_txwin,            "SMALL-TXWN")
+/* ---- Must update size of stat_why_req_ack[] if more are added! */
+
+#define rxrpc_txbuf_traces \
+       EM(rxrpc_txbuf_alloc_ack,               "ALLOC ACK  ")  \
+       EM(rxrpc_txbuf_alloc_data,              "ALLOC DATA ")  \
+       EM(rxrpc_txbuf_free,                    "FREE       ")  \
+       EM(rxrpc_txbuf_get_buffer,              "GET BUFFER ")  \
+       EM(rxrpc_txbuf_get_trans,               "GET TRANS  ")  \
+       EM(rxrpc_txbuf_get_retrans,             "GET RETRANS")  \
+       EM(rxrpc_txbuf_put_ack_tx,              "PUT ACK TX ")  \
+       EM(rxrpc_txbuf_put_cleaned,             "PUT CLEANED")  \
+       EM(rxrpc_txbuf_put_nomem,               "PUT NOMEM  ")  \
+       EM(rxrpc_txbuf_put_rotated,             "PUT ROTATED")  \
+       EM(rxrpc_txbuf_put_send_aborted,        "PUT SEND-X ")  \
+       EM(rxrpc_txbuf_put_trans,               "PUT TRANS  ")  \
+       EM(rxrpc_txbuf_see_out_of_step,         "OUT-OF-STEP")  \
+       EM(rxrpc_txbuf_see_send_more,           "SEE SEND+  ")  \
+       E_(rxrpc_txbuf_see_unacked,             "SEE UNACKED")
+
 /*
  * Generate enums for tracing information.
  */
 #define EM(a, b) a,
 #define E_(a, b) a
 
+enum rxrpc_bundle_trace                { rxrpc_bundle_traces } __mode(byte);
+enum rxrpc_call_poke_trace     { rxrpc_call_poke_traces } __mode(byte);
 enum rxrpc_call_trace          { rxrpc_call_traces } __mode(byte);
 enum rxrpc_client_trace                { rxrpc_client_traces } __mode(byte);
 enum rxrpc_congest_change      { rxrpc_congest_changes } __mode(byte);
@@ -263,12 +391,14 @@ enum rxrpc_propose_ack_outcome    { rxrpc_propose_ack_outcomes } __mode(byte);
 enum rxrpc_propose_ack_trace   { rxrpc_propose_ack_traces } __mode(byte);
 enum rxrpc_receive_trace       { rxrpc_receive_traces } __mode(byte);
 enum rxrpc_recvmsg_trace       { rxrpc_recvmsg_traces } __mode(byte);
+enum rxrpc_req_ack_trace       { rxrpc_req_ack_traces } __mode(byte);
 enum rxrpc_rtt_rx_trace                { rxrpc_rtt_rx_traces } __mode(byte);
 enum rxrpc_rtt_tx_trace                { rxrpc_rtt_tx_traces } __mode(byte);
 enum rxrpc_skb_trace           { rxrpc_skb_traces } __mode(byte);
 enum rxrpc_timer_trace         { rxrpc_timer_traces } __mode(byte);
-enum rxrpc_transmit_trace      { rxrpc_transmit_traces } __mode(byte);
 enum rxrpc_tx_point            { rxrpc_tx_points } __mode(byte);
+enum rxrpc_txbuf_trace         { rxrpc_txbuf_traces } __mode(byte);
+enum rxrpc_txqueue_trace       { rxrpc_txqueue_traces } __mode(byte);
 
 #endif /* end __RXRPC_DECLARE_TRACE_ENUMS_ONCE_ONLY */
 
@@ -280,22 +410,25 @@ enum rxrpc_tx_point               { rxrpc_tx_points } __mode(byte);
 #define EM(a, b) TRACE_DEFINE_ENUM(a);
 #define E_(a, b) TRACE_DEFINE_ENUM(a);
 
+rxrpc_bundle_traces;
+rxrpc_call_poke_traces;
 rxrpc_call_traces;
 rxrpc_client_traces;
 rxrpc_congest_changes;
 rxrpc_congest_modes;
 rxrpc_conn_traces;
 rxrpc_local_traces;
-rxrpc_propose_ack_outcomes;
 rxrpc_propose_ack_traces;
 rxrpc_receive_traces;
 rxrpc_recvmsg_traces;
+rxrpc_req_ack_traces;
 rxrpc_rtt_rx_traces;
 rxrpc_rtt_tx_traces;
 rxrpc_skb_traces;
 rxrpc_timer_traces;
-rxrpc_transmit_traces;
 rxrpc_tx_points;
+rxrpc_txbuf_traces;
+rxrpc_txqueue_traces;
 
 /*
  * Now redefine the EM() and E_() macros to map the enums to the strings that
@@ -308,83 +441,98 @@ rxrpc_tx_points;
 
 TRACE_EVENT(rxrpc_local,
            TP_PROTO(unsigned int local_debug_id, enum rxrpc_local_trace op,
-                    int usage, const void *where),
+                    int ref, int usage),
 
-           TP_ARGS(local_debug_id, op, usage, where),
+           TP_ARGS(local_debug_id, op, ref, usage),
 
            TP_STRUCT__entry(
                    __field(unsigned int,       local           )
                    __field(int,                op              )
+                   __field(int,                ref             )
                    __field(int,                usage           )
-                   __field(const void *,       where           )
                             ),
 
            TP_fast_assign(
                    __entry->local = local_debug_id;
                    __entry->op = op;
+                   __entry->ref = ref;
                    __entry->usage = usage;
-                   __entry->where = where;
                           ),
 
-           TP_printk("L=%08x %s u=%d sp=%pSR",
+           TP_printk("L=%08x %s r=%d u=%d",
                      __entry->local,
                      __print_symbolic(__entry->op, rxrpc_local_traces),
-                     __entry->usage,
-                     __entry->where)
+                     __entry->ref,
+                     __entry->usage)
            );
 
 TRACE_EVENT(rxrpc_peer,
-           TP_PROTO(unsigned int peer_debug_id, enum rxrpc_peer_trace op,
-                    int usage, const void *where),
+           TP_PROTO(unsigned int peer_debug_id, int ref, enum rxrpc_peer_trace why),
 
-           TP_ARGS(peer_debug_id, op, usage, where),
+           TP_ARGS(peer_debug_id, ref, why),
 
            TP_STRUCT__entry(
                    __field(unsigned int,       peer            )
-                   __field(int,                op              )
-                   __field(int,                usage           )
-                   __field(const void *,       where           )
+                   __field(int,                ref             )
+                   __field(int,                why             )
                             ),
 
            TP_fast_assign(
                    __entry->peer = peer_debug_id;
-                   __entry->op = op;
-                   __entry->usage = usage;
-                   __entry->where = where;
+                   __entry->ref = ref;
+                   __entry->why = why;
                           ),
 
-           TP_printk("P=%08x %s u=%d sp=%pSR",
+           TP_printk("P=%08x %s r=%d",
                      __entry->peer,
-                     __print_symbolic(__entry->op, rxrpc_peer_traces),
-                     __entry->usage,
-                     __entry->where)
+                     __print_symbolic(__entry->why, rxrpc_peer_traces),
+                     __entry->ref)
+           );
+
+TRACE_EVENT(rxrpc_bundle,
+           TP_PROTO(unsigned int bundle_debug_id, int ref, enum rxrpc_bundle_trace why),
+
+           TP_ARGS(bundle_debug_id, ref, why),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,       bundle          )
+                   __field(int,                ref             )
+                   __field(int,                why             )
+                            ),
+
+           TP_fast_assign(
+                   __entry->bundle = bundle_debug_id;
+                   __entry->ref = ref;
+                   __entry->why = why;
+                          ),
+
+           TP_printk("CB=%08x %s r=%d",
+                     __entry->bundle,
+                     __print_symbolic(__entry->why, rxrpc_bundle_traces),
+                     __entry->ref)
            );
 
 TRACE_EVENT(rxrpc_conn,
-           TP_PROTO(unsigned int conn_debug_id, enum rxrpc_conn_trace op,
-                    int usage, const void *where),
+           TP_PROTO(unsigned int conn_debug_id, int ref, enum rxrpc_conn_trace why),
 
-           TP_ARGS(conn_debug_id, op, usage, where),
+           TP_ARGS(conn_debug_id, ref, why),
 
            TP_STRUCT__entry(
                    __field(unsigned int,       conn            )
-                   __field(int,                op              )
-                   __field(int,                usage           )
-                   __field(const void *,       where           )
+                   __field(int,                ref             )
+                   __field(int,                why             )
                             ),
 
            TP_fast_assign(
                    __entry->conn = conn_debug_id;
-                   __entry->op = op;
-                   __entry->usage = usage;
-                   __entry->where = where;
+                   __entry->ref = ref;
+                   __entry->why = why;
                           ),
 
-           TP_printk("C=%08x %s u=%d sp=%pSR",
+           TP_printk("C=%08x %s r=%d",
                      __entry->conn,
-                     __print_symbolic(__entry->op, rxrpc_conn_traces),
-                     __entry->usage,
-                     __entry->where)
+                     __print_symbolic(__entry->why, rxrpc_conn_traces),
+                     __entry->ref)
            );
 
 TRACE_EVENT(rxrpc_client,
@@ -418,66 +566,57 @@ TRACE_EVENT(rxrpc_client,
            );
 
 TRACE_EVENT(rxrpc_call,
-           TP_PROTO(unsigned int call_debug_id, enum rxrpc_call_trace op,
-                    int usage, const void *where, const void *aux),
+           TP_PROTO(unsigned int call_debug_id, int ref, unsigned long aux,
+                    enum rxrpc_call_trace why),
 
-           TP_ARGS(call_debug_id, op, usage, where, aux),
+           TP_ARGS(call_debug_id, ref, aux, why),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
-                   __field(int,                        op              )
-                   __field(int,                        usage           )
-                   __field(const void *,               where           )
-                   __field(const void *,               aux             )
+                   __field(int,                        ref             )
+                   __field(int,                        why             )
+                   __field(unsigned long,              aux             )
                             ),
 
            TP_fast_assign(
                    __entry->call = call_debug_id;
-                   __entry->op = op;
-                   __entry->usage = usage;
-                   __entry->where = where;
+                   __entry->ref = ref;
+                   __entry->why = why;
                    __entry->aux = aux;
                           ),
 
-           TP_printk("c=%08x %s u=%d sp=%pSR a=%p",
+           TP_printk("c=%08x %s r=%d a=%lx",
                      __entry->call,
-                     __print_symbolic(__entry->op, rxrpc_call_traces),
-                     __entry->usage,
-                     __entry->where,
+                     __print_symbolic(__entry->why, rxrpc_call_traces),
+                     __entry->ref,
                      __entry->aux)
            );
 
 TRACE_EVENT(rxrpc_skb,
-           TP_PROTO(struct sk_buff *skb, enum rxrpc_skb_trace op,
-                    int usage, int mod_count, u8 flags,    const void *where),
+           TP_PROTO(struct sk_buff *skb, int usage, int mod_count,
+                    enum rxrpc_skb_trace why),
 
-           TP_ARGS(skb, op, usage, mod_count, flags, where),
+           TP_ARGS(skb, usage, mod_count, why),
 
            TP_STRUCT__entry(
                    __field(struct sk_buff *,           skb             )
-                   __field(enum rxrpc_skb_trace,       op              )
-                   __field(u8,                         flags           )
                    __field(int,                        usage           )
                    __field(int,                        mod_count       )
-                   __field(const void *,               where           )
+                   __field(enum rxrpc_skb_trace,       why             )
                             ),
 
            TP_fast_assign(
                    __entry->skb = skb;
-                   __entry->flags = flags;
-                   __entry->op = op;
                    __entry->usage = usage;
                    __entry->mod_count = mod_count;
-                   __entry->where = where;
+                   __entry->why = why;
                           ),
 
-           TP_printk("s=%p %cx %s u=%d m=%d p=%pSR",
+           TP_printk("s=%p Rx %s u=%d m=%d",
                      __entry->skb,
-                     __entry->flags & RXRPC_SKB_TX_BUFFER ? 'T' : 'R',
-                     __print_symbolic(__entry->op, rxrpc_skb_traces),
+                     __print_symbolic(__entry->why, rxrpc_skb_traces),
                      __entry->usage,
-                     __entry->mod_count,
-                     __entry->where)
+                     __entry->mod_count)
            );
 
 TRACE_EVENT(rxrpc_rx_packet,
@@ -578,47 +717,53 @@ TRACE_EVENT(rxrpc_call_complete,
                      __entry->abort_code)
            );
 
-TRACE_EVENT(rxrpc_transmit,
-           TP_PROTO(struct rxrpc_call *call, enum rxrpc_transmit_trace why),
+TRACE_EVENT(rxrpc_txqueue,
+           TP_PROTO(struct rxrpc_call *call, enum rxrpc_txqueue_trace why),
 
            TP_ARGS(call, why),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
-                   __field(enum rxrpc_transmit_trace,  why             )
-                   __field(rxrpc_seq_t,                tx_hard_ack     )
+                   __field(enum rxrpc_txqueue_trace,   why             )
+                   __field(rxrpc_seq_t,                acks_hard_ack   )
+                   __field(rxrpc_seq_t,                tx_bottom       )
                    __field(rxrpc_seq_t,                tx_top          )
+                   __field(rxrpc_seq_t,                tx_prepared     )
                    __field(int,                        tx_winsize      )
                             ),
 
            TP_fast_assign(
                    __entry->call = call->debug_id;
                    __entry->why = why;
-                   __entry->tx_hard_ack = call->tx_hard_ack;
+                   __entry->acks_hard_ack = call->acks_hard_ack;
+                   __entry->tx_bottom = call->tx_bottom;
                    __entry->tx_top = call->tx_top;
+                   __entry->tx_prepared = call->tx_prepared;
                    __entry->tx_winsize = call->tx_winsize;
                           ),
 
-           TP_printk("c=%08x %s f=%08x n=%u/%u",
+           TP_printk("c=%08x %s f=%08x h=%08x n=%u/%u/%u/%u",
                      __entry->call,
-                     __print_symbolic(__entry->why, rxrpc_transmit_traces),
-                     __entry->tx_hard_ack + 1,
-                     __entry->tx_top - __entry->tx_hard_ack,
+                     __print_symbolic(__entry->why, rxrpc_txqueue_traces),
+                     __entry->tx_bottom,
+                     __entry->acks_hard_ack,
+                     __entry->tx_top - __entry->tx_bottom,
+                     __entry->tx_top - __entry->acks_hard_ack,
+                     __entry->tx_prepared - __entry->tx_bottom,
                      __entry->tx_winsize)
            );
 
 TRACE_EVENT(rxrpc_rx_data,
            TP_PROTO(unsigned int call, rxrpc_seq_t seq,
-                    rxrpc_serial_t serial, u8 flags, u8 anno),
+                    rxrpc_serial_t serial, u8 flags),
 
-           TP_ARGS(call, seq, serial, flags, anno),
+           TP_ARGS(call, seq, serial, flags),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
                    __field(rxrpc_seq_t,                seq             )
                    __field(rxrpc_serial_t,             serial          )
                    __field(u8,                         flags           )
-                   __field(u8,                         anno            )
                             ),
 
            TP_fast_assign(
@@ -626,15 +771,13 @@ TRACE_EVENT(rxrpc_rx_data,
                    __entry->seq = seq;
                    __entry->serial = serial;
                    __entry->flags = flags;
-                   __entry->anno = anno;
                           ),
 
-           TP_printk("c=%08x DATA %08x q=%08x fl=%02x a=%02x",
+           TP_printk("c=%08x DATA %08x q=%08x fl=%02x",
                      __entry->call,
                      __entry->serial,
                      __entry->seq,
-                     __entry->flags,
-                     __entry->anno)
+                     __entry->flags)
            );
 
 TRACE_EVENT(rxrpc_rx_ack,
@@ -698,6 +841,66 @@ TRACE_EVENT(rxrpc_rx_abort,
                      __entry->abort_code)
            );
 
+TRACE_EVENT(rxrpc_rx_challenge,
+           TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
+                    u32 version, u32 nonce, u32 min_level),
+
+           TP_ARGS(conn, serial, version, nonce, min_level),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               conn            )
+                   __field(rxrpc_serial_t,             serial          )
+                   __field(u32,                        version         )
+                   __field(u32,                        nonce           )
+                   __field(u32,                        min_level       )
+                            ),
+
+           TP_fast_assign(
+                   __entry->conn = conn->debug_id;
+                   __entry->serial = serial;
+                   __entry->version = version;
+                   __entry->nonce = nonce;
+                   __entry->min_level = min_level;
+                          ),
+
+           TP_printk("C=%08x CHALLENGE %08x v=%x n=%x ml=%x",
+                     __entry->conn,
+                     __entry->serial,
+                     __entry->version,
+                     __entry->nonce,
+                     __entry->min_level)
+           );
+
+TRACE_EVENT(rxrpc_rx_response,
+           TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
+                    u32 version, u32 kvno, u32 ticket_len),
+
+           TP_ARGS(conn, serial, version, kvno, ticket_len),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               conn            )
+                   __field(rxrpc_serial_t,             serial          )
+                   __field(u32,                        version         )
+                   __field(u32,                        kvno            )
+                   __field(u32,                        ticket_len      )
+                            ),
+
+           TP_fast_assign(
+                   __entry->conn = conn->debug_id;
+                   __entry->serial = serial;
+                   __entry->version = version;
+                   __entry->kvno = kvno;
+                   __entry->ticket_len = ticket_len;
+                          ),
+
+           TP_printk("C=%08x RESPONSE %08x v=%x kvno=%x tl=%x",
+                     __entry->conn,
+                     __entry->serial,
+                     __entry->version,
+                     __entry->kvno,
+                     __entry->ticket_len)
+           );
+
 TRACE_EVENT(rxrpc_rx_rwind_change,
            TP_PROTO(struct rxrpc_call *call, rxrpc_serial_t serial,
                     u32 rwind, bool wake),
@@ -841,8 +1044,7 @@ TRACE_EVENT(rxrpc_receive,
                    __field(enum rxrpc_receive_trace,   why             )
                    __field(rxrpc_serial_t,             serial          )
                    __field(rxrpc_seq_t,                seq             )
-                   __field(rxrpc_seq_t,                hard_ack        )
-                   __field(rxrpc_seq_t,                top             )
+                   __field(u64,                        window          )
                             ),
 
            TP_fast_assign(
@@ -850,8 +1052,7 @@ TRACE_EVENT(rxrpc_receive,
                    __entry->why = why;
                    __entry->serial = serial;
                    __entry->seq = seq;
-                   __entry->hard_ack = call->rx_hard_ack;
-                   __entry->top = call->rx_top;
+                   __entry->window = atomic64_read(&call->ackr_window);
                           ),
 
            TP_printk("c=%08x %s r=%08x q=%08x w=%08x-%08x",
@@ -859,11 +1060,35 @@ TRACE_EVENT(rxrpc_receive,
                      __print_symbolic(__entry->why, rxrpc_receive_traces),
                      __entry->serial,
                      __entry->seq,
-                     __entry->hard_ack,
-                     __entry->top)
+                     lower_32_bits(__entry->window),
+                     upper_32_bits(__entry->window))
            );
 
 TRACE_EVENT(rxrpc_recvmsg,
+           TP_PROTO(struct rxrpc_call *call, enum rxrpc_recvmsg_trace why,
+                    int ret),
+
+           TP_ARGS(call, why, ret),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               call            )
+                   __field(enum rxrpc_recvmsg_trace,   why             )
+                   __field(int,                        ret             )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call = call ? call->debug_id : 0;
+                   __entry->why = why;
+                   __entry->ret = ret;
+                          ),
+
+           TP_printk("c=%08x %s ret=%d",
+                     __entry->call,
+                     __print_symbolic(__entry->why, rxrpc_recvmsg_traces),
+                     __entry->ret)
+           );
+
+TRACE_EVENT(rxrpc_recvdata,
            TP_PROTO(struct rxrpc_call *call, enum rxrpc_recvmsg_trace why,
                     rxrpc_seq_t seq, unsigned int offset, unsigned int len,
                     int ret),
@@ -986,7 +1211,7 @@ TRACE_EVENT(rxrpc_timer,
                    __entry->call               = call->debug_id;
                    __entry->why                = why;
                    __entry->now                = now;
-                   __entry->ack_at             = call->ack_at;
+                   __entry->ack_at             = call->delay_ack_at;
                    __entry->ack_lost_at        = call->ack_lost_at;
                    __entry->resend_at          = call->resend_at;
                    __entry->expect_rx_by       = call->expect_rx_by;
@@ -1007,6 +1232,47 @@ TRACE_EVENT(rxrpc_timer,
                      __entry->timer - __entry->now)
            );
 
+TRACE_EVENT(rxrpc_timer_expired,
+           TP_PROTO(struct rxrpc_call *call, unsigned long now),
+
+           TP_ARGS(call, now),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,                       call            )
+                   __field(long,                               now             )
+                   __field(long,                               ack_at          )
+                   __field(long,                               ack_lost_at     )
+                   __field(long,                               resend_at       )
+                   __field(long,                               ping_at         )
+                   __field(long,                               expect_rx_by    )
+                   __field(long,                               expect_req_by   )
+                   __field(long,                               expect_term_by  )
+                   __field(long,                               timer           )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call               = call->debug_id;
+                   __entry->now                = now;
+                   __entry->ack_at             = call->delay_ack_at;
+                   __entry->ack_lost_at        = call->ack_lost_at;
+                   __entry->resend_at          = call->resend_at;
+                   __entry->expect_rx_by       = call->expect_rx_by;
+                   __entry->expect_req_by      = call->expect_req_by;
+                   __entry->expect_term_by     = call->expect_term_by;
+                   __entry->timer              = call->timer.expires;
+                          ),
+
+           TP_printk("c=%08x EXPIRED a=%ld la=%ld r=%ld xr=%ld xq=%ld xt=%ld t=%ld",
+                     __entry->call,
+                     __entry->ack_at - __entry->now,
+                     __entry->ack_lost_at - __entry->now,
+                     __entry->resend_at - __entry->now,
+                     __entry->expect_rx_by - __entry->now,
+                     __entry->expect_req_by - __entry->now,
+                     __entry->expect_term_by - __entry->now,
+                     __entry->timer - __entry->now)
+           );
+
 TRACE_EVENT(rxrpc_rx_lose,
            TP_PROTO(struct rxrpc_skb_priv *sp),
 
@@ -1031,20 +1297,15 @@ TRACE_EVENT(rxrpc_rx_lose,
 
 TRACE_EVENT(rxrpc_propose_ack,
            TP_PROTO(struct rxrpc_call *call, enum rxrpc_propose_ack_trace why,
-                    u8 ack_reason, rxrpc_serial_t serial, bool immediate,
-                    bool background, enum rxrpc_propose_ack_outcome outcome),
+                    u8 ack_reason, rxrpc_serial_t serial),
 
-           TP_ARGS(call, why, ack_reason, serial, immediate, background,
-                   outcome),
+           TP_ARGS(call, why, ack_reason, serial),
 
            TP_STRUCT__entry(
                    __field(unsigned int,                       call            )
                    __field(enum rxrpc_propose_ack_trace,       why             )
                    __field(rxrpc_serial_t,                     serial          )
                    __field(u8,                                 ack_reason      )
-                   __field(bool,                               immediate       )
-                   __field(bool,                               background      )
-                   __field(enum rxrpc_propose_ack_outcome,     outcome         )
                             ),
 
            TP_fast_assign(
@@ -1052,45 +1313,91 @@ TRACE_EVENT(rxrpc_propose_ack,
                    __entry->why        = why;
                    __entry->serial     = serial;
                    __entry->ack_reason = ack_reason;
-                   __entry->immediate  = immediate;
-                   __entry->background = background;
-                   __entry->outcome    = outcome;
                           ),
 
-           TP_printk("c=%08x %s %s r=%08x i=%u b=%u%s",
+           TP_printk("c=%08x %s %s r=%08x",
                      __entry->call,
                      __print_symbolic(__entry->why, rxrpc_propose_ack_traces),
                      __print_symbolic(__entry->ack_reason, rxrpc_ack_names),
-                     __entry->serial,
-                     __entry->immediate,
-                     __entry->background,
-                     __print_symbolic(__entry->outcome, rxrpc_propose_ack_outcomes))
+                     __entry->serial)
+           );
+
+TRACE_EVENT(rxrpc_send_ack,
+           TP_PROTO(struct rxrpc_call *call, enum rxrpc_propose_ack_trace why,
+                    u8 ack_reason, rxrpc_serial_t serial),
+
+           TP_ARGS(call, why, ack_reason, serial),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,                       call            )
+                   __field(enum rxrpc_propose_ack_trace,       why             )
+                   __field(rxrpc_serial_t,                     serial          )
+                   __field(u8,                                 ack_reason      )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call       = call->debug_id;
+                   __entry->why        = why;
+                   __entry->serial     = serial;
+                   __entry->ack_reason = ack_reason;
+                          ),
+
+           TP_printk("c=%08x %s %s r=%08x",
+                     __entry->call,
+                     __print_symbolic(__entry->why, rxrpc_propose_ack_traces),
+                     __print_symbolic(__entry->ack_reason, rxrpc_ack_names),
+                     __entry->serial)
+           );
+
+TRACE_EVENT(rxrpc_drop_ack,
+           TP_PROTO(struct rxrpc_call *call, enum rxrpc_propose_ack_trace why,
+                    u8 ack_reason, rxrpc_serial_t serial, bool nobuf),
+
+           TP_ARGS(call, why, ack_reason, serial, nobuf),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,                       call            )
+                   __field(enum rxrpc_propose_ack_trace,       why             )
+                   __field(rxrpc_serial_t,                     serial          )
+                   __field(u8,                                 ack_reason      )
+                   __field(bool,                               nobuf           )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call       = call->debug_id;
+                   __entry->why        = why;
+                   __entry->serial     = serial;
+                   __entry->ack_reason = ack_reason;
+                   __entry->nobuf      = nobuf;
+                          ),
+
+           TP_printk("c=%08x %s %s r=%08x nbf=%u",
+                     __entry->call,
+                     __print_symbolic(__entry->why, rxrpc_propose_ack_traces),
+                     __print_symbolic(__entry->ack_reason, rxrpc_ack_names),
+                     __entry->serial, __entry->nobuf)
            );
 
 TRACE_EVENT(rxrpc_retransmit,
-           TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, u8 annotation,
-                    s64 expiry),
+           TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, s64 expiry),
 
-           TP_ARGS(call, seq, annotation, expiry),
+           TP_ARGS(call, seq, expiry),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
                    __field(rxrpc_seq_t,                seq             )
-                   __field(u8,                         annotation      )
                    __field(s64,                        expiry          )
                             ),
 
            TP_fast_assign(
                    __entry->call = call->debug_id;
                    __entry->seq = seq;
-                   __entry->annotation = annotation;
                    __entry->expiry = expiry;
                           ),
 
-           TP_printk("c=%08x q=%x a=%02x xp=%lld",
+           TP_printk("c=%08x q=%x xp=%lld",
                      __entry->call,
                      __entry->seq,
-                     __entry->annotation,
                      __entry->expiry)
            );
 
@@ -1113,14 +1420,14 @@ TRACE_EVENT(rxrpc_congest,
            TP_fast_assign(
                    __entry->call       = call->debug_id;
                    __entry->change     = change;
-                   __entry->hard_ack   = call->tx_hard_ack;
+                   __entry->hard_ack   = call->acks_hard_ack;
                    __entry->top        = call->tx_top;
                    __entry->lowest_nak = call->acks_lowest_nak;
                    __entry->ack_serial = ack_serial;
                    memcpy(&__entry->sum, summary, sizeof(__entry->sum));
                           ),
 
-           TP_printk("c=%08x r=%08x %s q=%08x %s cw=%u ss=%u nr=%u,%u nw=%u,%u r=%u b=%u u=%u d=%u l=%x%s%s%s",
+           TP_printk("c=%08x r=%08x %s q=%08x %s cw=%u ss=%u nA=%u,%u+%u r=%u b=%u u=%u d=%u l=%x%s%s%s",
                      __entry->call,
                      __entry->ack_serial,
                      __print_symbolic(__entry->sum.ack_reason, rxrpc_ack_names),
@@ -1128,8 +1435,8 @@ TRACE_EVENT(rxrpc_congest,
                      __print_symbolic(__entry->sum.mode, rxrpc_congest_modes),
                      __entry->sum.cwnd,
                      __entry->sum.ssthresh,
-                     __entry->sum.nr_acks, __entry->sum.nr_nacks,
-                     __entry->sum.nr_new_acks, __entry->sum.nr_new_nacks,
+                     __entry->sum.nr_acks, __entry->sum.saw_nacks,
+                     __entry->sum.nr_new_acks,
                      __entry->sum.nr_rot_new_acks,
                      __entry->top - __entry->hard_ack,
                      __entry->sum.cumulative_acks,
@@ -1139,6 +1446,44 @@ TRACE_EVENT(rxrpc_congest,
                      __entry->sum.retrans_timeo ? " rTxTo" : "")
            );
 
+TRACE_EVENT(rxrpc_reset_cwnd,
+           TP_PROTO(struct rxrpc_call *call, ktime_t now),
+
+           TP_ARGS(call, now),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,                       call            )
+                   __field(enum rxrpc_congest_mode,            mode            )
+                   __field(unsigned short,                     cwnd            )
+                   __field(unsigned short,                     extra           )
+                   __field(rxrpc_seq_t,                        hard_ack        )
+                   __field(rxrpc_seq_t,                        prepared        )
+                   __field(ktime_t,                            since_last_tx   )
+                   __field(bool,                               has_data        )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call       = call->debug_id;
+                   __entry->mode       = call->cong_mode;
+                   __entry->cwnd       = call->cong_cwnd;
+                   __entry->extra      = call->cong_extra;
+                   __entry->hard_ack   = call->acks_hard_ack;
+                   __entry->prepared   = call->tx_prepared - call->tx_bottom;
+                   __entry->since_last_tx = ktime_sub(now, call->tx_last_sent);
+                   __entry->has_data   = !list_empty(&call->tx_sendmsg);
+                          ),
+
+           TP_printk("c=%08x q=%08x %s cw=%u+%u pr=%u tm=%llu d=%u",
+                     __entry->call,
+                     __entry->hard_ack,
+                     __print_symbolic(__entry->mode, rxrpc_congest_modes),
+                     __entry->cwnd,
+                     __entry->extra,
+                     __entry->prepared,
+                     ktime_to_ns(__entry->since_last_tx),
+                     __entry->has_data)
+           );
+
 TRACE_EVENT(rxrpc_disconnect_call,
            TP_PROTO(struct rxrpc_call *call),
 
@@ -1213,6 +1558,7 @@ TRACE_EVENT(rxrpc_connect_call,
                    __field(unsigned long,              user_call_ID    )
                    __field(u32,                        cid             )
                    __field(u32,                        call_id         )
+                   __field_struct(struct sockaddr_rxrpc, srx           )
                             ),
 
            TP_fast_assign(
@@ -1220,36 +1566,42 @@ TRACE_EVENT(rxrpc_connect_call,
                    __entry->user_call_ID = call->user_call_ID;
                    __entry->cid = call->cid;
                    __entry->call_id = call->call_id;
+                   __entry->srx = call->dest_srx;
                           ),
 
-           TP_printk("c=%08x u=%p %08x:%08x",
+           TP_printk("c=%08x u=%p %08x:%08x dst=%pISp",
                      __entry->call,
                      (void *)__entry->user_call_ID,
                      __entry->cid,
-                     __entry->call_id)
+                     __entry->call_id,
+                     &__entry->srx.transport)
            );
 
 TRACE_EVENT(rxrpc_resend,
-           TP_PROTO(struct rxrpc_call *call, int ix),
+           TP_PROTO(struct rxrpc_call *call, struct sk_buff *ack),
 
-           TP_ARGS(call, ix),
+           TP_ARGS(call, ack),
 
            TP_STRUCT__entry(
                    __field(unsigned int,               call            )
-                   __field(int,                        ix              )
-                   __array(u8,                         anno, 64        )
+                   __field(rxrpc_seq_t,                seq             )
+                   __field(rxrpc_seq_t,                transmitted     )
+                   __field(rxrpc_serial_t,             ack_serial      )
                             ),
 
            TP_fast_assign(
+                   struct rxrpc_skb_priv *sp = ack ? rxrpc_skb(ack) : NULL;
                    __entry->call = call->debug_id;
-                   __entry->ix = ix;
-                   memcpy(__entry->anno, call->rxtx_annotations, 64);
+                   __entry->seq = call->acks_hard_ack;
+                   __entry->transmitted = call->tx_transmitted;
+                   __entry->ack_serial = sp ? sp->hdr.serial : 0;
                           ),
 
-           TP_printk("c=%08x ix=%u a=%64phN",
+           TP_printk("c=%08x r=%x q=%x tq=%x",
                      __entry->call,
-                     __entry->ix,
-                     __entry->anno)
+                     __entry->ack_serial,
+                     __entry->seq,
+                     __entry->transmitted)
            );
 
 TRACE_EVENT(rxrpc_rx_icmp,
@@ -1329,8 +1681,8 @@ TRACE_EVENT(rxrpc_call_reset,
                    __entry->call_id = call->call_id;
                    __entry->call_serial = call->rx_serial;
                    __entry->conn_serial = call->conn->hi_serial;
-                   __entry->tx_seq = call->tx_hard_ack;
-                   __entry->rx_seq = call->rx_hard_ack;
+                   __entry->tx_seq = call->acks_hard_ack;
+                   __entry->rx_seq = call->rx_highest_seq;
                           ),
 
            TP_printk("c=%08x %08x:%08x r=%08x/%08x tx=%08x rx=%08x",
@@ -1395,6 +1747,102 @@ TRACE_EVENT(rxrpc_rx_discard_ack,
                      __entry->call_ackr_prev)
            );
 
+TRACE_EVENT(rxrpc_req_ack,
+           TP_PROTO(unsigned int call_debug_id, rxrpc_seq_t seq,
+                    enum rxrpc_req_ack_trace why),
+
+           TP_ARGS(call_debug_id, seq, why),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               call_debug_id   )
+                   __field(rxrpc_seq_t,                seq             )
+                   __field(enum rxrpc_req_ack_trace,   why             )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call_debug_id = call_debug_id;
+                   __entry->seq = seq;
+                   __entry->why = why;
+                          ),
+
+           TP_printk("c=%08x q=%08x REQ-%s",
+                     __entry->call_debug_id,
+                     __entry->seq,
+                     __print_symbolic(__entry->why, rxrpc_req_ack_traces))
+           );
+
+TRACE_EVENT(rxrpc_txbuf,
+           TP_PROTO(unsigned int debug_id,
+                    unsigned int call_debug_id, rxrpc_seq_t seq,
+                    int ref, enum rxrpc_txbuf_trace what),
+
+           TP_ARGS(debug_id, call_debug_id, seq, ref, what),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               debug_id        )
+                   __field(unsigned int,               call_debug_id   )
+                   __field(rxrpc_seq_t,                seq             )
+                   __field(int,                        ref             )
+                   __field(enum rxrpc_txbuf_trace,     what            )
+                            ),
+
+           TP_fast_assign(
+                   __entry->debug_id = debug_id;
+                   __entry->call_debug_id = call_debug_id;
+                   __entry->seq = seq;
+                   __entry->ref = ref;
+                   __entry->what = what;
+                          ),
+
+           TP_printk("B=%08x c=%08x q=%08x %s r=%d",
+                     __entry->debug_id,
+                     __entry->call_debug_id,
+                     __entry->seq,
+                     __print_symbolic(__entry->what, rxrpc_txbuf_traces),
+                     __entry->ref)
+           );
+
+TRACE_EVENT(rxrpc_poke_call,
+           TP_PROTO(struct rxrpc_call *call, bool busy,
+                    enum rxrpc_call_poke_trace what),
+
+           TP_ARGS(call, busy, what),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               call_debug_id   )
+                   __field(bool,                       busy            )
+                   __field(enum rxrpc_call_poke_trace, what            )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call_debug_id = call->debug_id;
+                   __entry->busy = busy;
+                   __entry->what = what;
+                          ),
+
+           TP_printk("c=%08x %s%s",
+                     __entry->call_debug_id,
+                     __print_symbolic(__entry->what, rxrpc_call_poke_traces),
+                     __entry->busy ? "!" : "")
+           );
+
+TRACE_EVENT(rxrpc_call_poked,
+           TP_PROTO(struct rxrpc_call *call),
+
+           TP_ARGS(call),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               call_debug_id   )
+                            ),
+
+           TP_fast_assign(
+                   __entry->call_debug_id = call->debug_id;
+                          ),
+
+           TP_printk("c=%08x",
+                     __entry->call_debug_id)
+           );
+
 #undef EM
 #undef E_
 #endif /* _TRACE_RXRPC_H */