提交 4fc8cd49 编写于 作者: S Sean Hefty 提交者: Roland Dreier

IB/mad: Report number of times a mad was retried

To allow ULPs to tune timeout values and capture retry statistics,
report the number of times that a mad send operation was retried.

For RMPP mads, report the total number of times that the any portion
(send window) of the send operation was retried.
Signed-off-by: NSean Hefty <sean.hefty@intel.com>
Signed-off-by: NRoland Dreier <rolandd@cisco.com>
上级 547af765
...@@ -1100,7 +1100,9 @@ int ib_post_send_mad(struct ib_mad_send_buf *send_buf, ...@@ -1100,7 +1100,9 @@ int ib_post_send_mad(struct ib_mad_send_buf *send_buf,
mad_send_wr->tid = ((struct ib_mad_hdr *) send_buf->mad)->tid; mad_send_wr->tid = ((struct ib_mad_hdr *) send_buf->mad)->tid;
/* Timeout will be updated after send completes */ /* Timeout will be updated after send completes */
mad_send_wr->timeout = msecs_to_jiffies(send_buf->timeout_ms); mad_send_wr->timeout = msecs_to_jiffies(send_buf->timeout_ms);
mad_send_wr->retries = send_buf->retries; mad_send_wr->max_retries = send_buf->retries;
mad_send_wr->retries_left = send_buf->retries;
send_buf->retries = 0;
/* Reference for work request to QP + response */ /* Reference for work request to QP + response */
mad_send_wr->refcount = 1 + (mad_send_wr->timeout > 0); mad_send_wr->refcount = 1 + (mad_send_wr->timeout > 0);
mad_send_wr->status = IB_WC_SUCCESS; mad_send_wr->status = IB_WC_SUCCESS;
...@@ -2436,9 +2438,12 @@ static int retry_send(struct ib_mad_send_wr_private *mad_send_wr) ...@@ -2436,9 +2438,12 @@ static int retry_send(struct ib_mad_send_wr_private *mad_send_wr)
{ {
int ret; int ret;
if (!mad_send_wr->retries--) if (!mad_send_wr->retries_left)
return -ETIMEDOUT; return -ETIMEDOUT;
mad_send_wr->retries_left--;
mad_send_wr->send_buf.retries++;
mad_send_wr->timeout = msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms); mad_send_wr->timeout = msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms);
if (mad_send_wr->mad_agent_priv->agent.rmpp_version) { if (mad_send_wr->mad_agent_priv->agent.rmpp_version) {
......
...@@ -131,7 +131,8 @@ struct ib_mad_send_wr_private { ...@@ -131,7 +131,8 @@ struct ib_mad_send_wr_private {
struct ib_sge sg_list[IB_MAD_SEND_REQ_MAX_SG]; struct ib_sge sg_list[IB_MAD_SEND_REQ_MAX_SG];
__be64 tid; __be64 tid;
unsigned long timeout; unsigned long timeout;
int retries; int max_retries;
int retries_left;
int retry; int retry;
int refcount; int refcount;
enum ib_wc_status status; enum ib_wc_status status;
......
...@@ -684,7 +684,7 @@ static void process_rmpp_ack(struct ib_mad_agent_private *agent, ...@@ -684,7 +684,7 @@ static void process_rmpp_ack(struct ib_mad_agent_private *agent,
if (seg_num > mad_send_wr->last_ack) { if (seg_num > mad_send_wr->last_ack) {
adjust_last_ack(mad_send_wr, seg_num); adjust_last_ack(mad_send_wr, seg_num);
mad_send_wr->retries = mad_send_wr->send_buf.retries; mad_send_wr->retries_left = mad_send_wr->max_retries;
} }
mad_send_wr->newwin = newwin; mad_send_wr->newwin = newwin;
if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) { if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) {
......
...@@ -230,7 +230,9 @@ struct ib_class_port_info ...@@ -230,7 +230,9 @@ struct ib_class_port_info
* @seg_count: The number of RMPP segments allocated for this send. * @seg_count: The number of RMPP segments allocated for this send.
* @seg_size: Size of each RMPP segment. * @seg_size: Size of each RMPP segment.
* @timeout_ms: Time to wait for a response. * @timeout_ms: Time to wait for a response.
* @retries: Number of times to retry a request for a response. * @retries: Number of times to retry a request for a response. For MADs
* using RMPP, this applies per window. On completion, returns the number
* of retries needed to complete the transfer.
* *
* Users are responsible for initializing the MAD buffer itself, with the * Users are responsible for initializing the MAD buffer itself, with the
* exception of any RMPP header. Additional segment buffer space allocated * exception of any RMPP header. Additional segment buffer space allocated
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册