RDS: add receive message trace used by application
[linux-2.6-microblaze.git] / include / uapi / linux / rds.h
index 0f9265c..3833113 100644 (file)
 #define RDS_GET_MR_FOR_DEST            7
 #define SO_RDS_TRANSPORT               8
 
+/* Socket option to tap receive path latency
+ *     SO_RDS: SO_RDS_MSG_RXPATH_LATENCY
+ *     Format used struct rds_rx_trace_so
+ */
+#define SO_RDS_MSG_RXPATH_LATENCY      10
+
+
 /* supported values for SO_RDS_TRANSPORT */
 #define        RDS_TRANS_IB    0
 #define        RDS_TRANS_IWARP 1
  *     the same as for the GET_MR setsockopt.
  * RDS_CMSG_RDMA_STATUS (recvmsg)
  *     Returns the status of a completed RDMA operation.
+ * RDS_CMSG_RXPATH_LATENCY(recvmsg)
+ *     Returns rds message latencies in various stages of receive
+ *     path in nS. Its set per socket using SO_RDS_MSG_RXPATH_LATENCY
+ *     socket option. Legitimate points are defined in
+ *     enum rds_message_rxpath_latency. More points can be added in
+ *     future. CSMG format is struct rds_cmsg_rx_trace.
  */
 #define RDS_CMSG_RDMA_ARGS             1
 #define RDS_CMSG_RDMA_DEST             2
 #define RDS_CMSG_ATOMIC_CSWP           7
 #define RDS_CMSG_MASKED_ATOMIC_FADD    8
 #define RDS_CMSG_MASKED_ATOMIC_CSWP    9
+#define RDS_CMSG_RXPATH_LATENCY                11
 
 #define RDS_INFO_FIRST                 10000
 #define RDS_INFO_COUNTERS              10000
@@ -171,6 +185,25 @@ struct rds_info_rdma_connection {
        uint32_t        rdma_mr_size;
 };
 
+/* RDS message Receive Path Latency points */
+enum rds_message_rxpath_latency {
+       RDS_MSG_RX_HDR_TO_DGRAM_START = 0,
+       RDS_MSG_RX_DGRAM_REASSEMBLE,
+       RDS_MSG_RX_DGRAM_DELIVERED,
+       RDS_MSG_RX_DGRAM_TRACE_MAX
+};
+
+struct rds_rx_trace_so {
+       u8 rx_traces;
+       u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX];
+};
+
+struct rds_cmsg_rx_trace {
+       u8 rx_traces;
+       u8 rx_trace_pos[RDS_MSG_RX_DGRAM_TRACE_MAX];
+       u64 rx_trace[RDS_MSG_RX_DGRAM_TRACE_MAX];
+};
+
 /*
  * Congestion monitoring.
  * Congestion control in RDS happens at the host connection