IB/cm: Simplify ib_cancel_mad() and ib_modify_mad() calls

The mad_agent parameter is redundant since the struct ib_mad_send_buf
already has a pointer of it.

Link: https://lore.kernel.org/r/0987c784b25f7bfa72f78691f50cff066de587e1.1622629024.git.leonro@nvidia.com
Signed-off-by: Mark Zhang <markzhang@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
Mark Zhang 2021-06-02 13:27:06 +03:00 committed by Jason Gunthorpe
parent 3595c398f6
commit 70076a414e
4 changed files with 39 additions and 51 deletions

View File

@ -1058,7 +1058,7 @@ retest:
break; break;
case IB_CM_SIDR_REQ_SENT: case IB_CM_SIDR_REQ_SENT:
cm_id->state = IB_CM_IDLE; cm_id->state = IB_CM_IDLE;
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
break; break;
case IB_CM_SIDR_REQ_RCVD: case IB_CM_SIDR_REQ_RCVD:
cm_send_sidr_rep_locked(cm_id_priv, cm_send_sidr_rep_locked(cm_id_priv,
@ -1069,7 +1069,7 @@ retest:
break; break;
case IB_CM_REQ_SENT: case IB_CM_REQ_SENT:
case IB_CM_MRA_REQ_RCVD: case IB_CM_MRA_REQ_RCVD:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_send_rej_locked(cm_id_priv, IB_CM_REJ_TIMEOUT, cm_send_rej_locked(cm_id_priv, IB_CM_REJ_TIMEOUT,
&cm_id_priv->id.device->node_guid, &cm_id_priv->id.device->node_guid,
sizeof(cm_id_priv->id.device->node_guid), sizeof(cm_id_priv->id.device->node_guid),
@ -1087,7 +1087,7 @@ retest:
break; break;
case IB_CM_REP_SENT: case IB_CM_REP_SENT:
case IB_CM_MRA_REP_RCVD: case IB_CM_MRA_REP_RCVD:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_send_rej_locked(cm_id_priv, IB_CM_REJ_CONSUMER_DEFINED, NULL, cm_send_rej_locked(cm_id_priv, IB_CM_REJ_CONSUMER_DEFINED, NULL,
0, NULL, 0); 0, NULL, 0);
goto retest; goto retest;
@ -1105,7 +1105,7 @@ retest:
cm_send_dreq_locked(cm_id_priv, NULL, 0); cm_send_dreq_locked(cm_id_priv, NULL, 0);
goto retest; goto retest;
case IB_CM_DREQ_SENT: case IB_CM_DREQ_SENT:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_enter_timewait(cm_id_priv); cm_enter_timewait(cm_id_priv);
goto retest; goto retest;
case IB_CM_DREQ_RCVD: case IB_CM_DREQ_RCVD:
@ -2531,7 +2531,7 @@ static int cm_rep_handler(struct cm_work *work)
cm_ack_timeout(cm_id_priv->target_ack_delay, cm_ack_timeout(cm_id_priv->target_ack_delay,
cm_id_priv->alt_av.timeout - 1); cm_id_priv->alt_av.timeout - 1);
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_queue_work_unlock(cm_id_priv, work); cm_queue_work_unlock(cm_id_priv, work);
return 0; return 0;
@ -2555,7 +2555,7 @@ static int cm_establish_handler(struct cm_work *work)
goto out; goto out;
} }
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_queue_work_unlock(cm_id_priv, work); cm_queue_work_unlock(cm_id_priv, work);
return 0; return 0;
out: out:
@ -2588,7 +2588,7 @@ static int cm_rtu_handler(struct cm_work *work)
} }
cm_id_priv->id.state = IB_CM_ESTABLISHED; cm_id_priv->id.state = IB_CM_ESTABLISHED;
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_queue_work_unlock(cm_id_priv, work); cm_queue_work_unlock(cm_id_priv, work);
return 0; return 0;
out: out:
@ -2633,7 +2633,7 @@ static int cm_send_dreq_locked(struct cm_id_private *cm_id_priv,
if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT || if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT ||
cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD) cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD)
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
msg = cm_alloc_priv_msg(cm_id_priv); msg = cm_alloc_priv_msg(cm_id_priv);
if (IS_ERR(msg)) { if (IS_ERR(msg)) {
@ -2807,12 +2807,12 @@ static int cm_dreq_handler(struct cm_work *work)
switch (cm_id_priv->id.state) { switch (cm_id_priv->id.state) {
case IB_CM_REP_SENT: case IB_CM_REP_SENT:
case IB_CM_DREQ_SENT: case IB_CM_DREQ_SENT:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
break; break;
case IB_CM_ESTABLISHED: case IB_CM_ESTABLISHED:
if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT || if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT ||
cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD) cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD)
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
break; break;
case IB_CM_MRA_REP_RCVD: case IB_CM_MRA_REP_RCVD:
break; break;
@ -2873,7 +2873,7 @@ static int cm_drep_handler(struct cm_work *work)
} }
cm_enter_timewait(cm_id_priv); cm_enter_timewait(cm_id_priv);
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_queue_work_unlock(cm_id_priv, work); cm_queue_work_unlock(cm_id_priv, work);
return 0; return 0;
out: out:
@ -3009,7 +3009,7 @@ static int cm_rej_handler(struct cm_work *work)
case IB_CM_MRA_REQ_RCVD: case IB_CM_MRA_REQ_RCVD:
case IB_CM_REP_SENT: case IB_CM_REP_SENT:
case IB_CM_MRA_REP_RCVD: case IB_CM_MRA_REP_RCVD:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
fallthrough; fallthrough;
case IB_CM_REQ_RCVD: case IB_CM_REQ_RCVD:
case IB_CM_MRA_REQ_SENT: case IB_CM_MRA_REQ_SENT:
@ -3019,7 +3019,7 @@ static int cm_rej_handler(struct cm_work *work)
cm_reset_to_idle(cm_id_priv); cm_reset_to_idle(cm_id_priv);
break; break;
case IB_CM_DREQ_SENT: case IB_CM_DREQ_SENT:
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
fallthrough; fallthrough;
case IB_CM_REP_RCVD: case IB_CM_REP_RCVD:
case IB_CM_MRA_REP_SENT: case IB_CM_MRA_REP_SENT:
@ -3029,8 +3029,7 @@ static int cm_rej_handler(struct cm_work *work)
if (cm_id_priv->id.lap_state == IB_CM_LAP_UNINIT || if (cm_id_priv->id.lap_state == IB_CM_LAP_UNINIT ||
cm_id_priv->id.lap_state == IB_CM_LAP_SENT) { cm_id_priv->id.lap_state == IB_CM_LAP_SENT) {
if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT) if (cm_id_priv->id.lap_state == IB_CM_LAP_SENT)
ib_cancel_mad(cm_id_priv->av.port->mad_agent, ib_cancel_mad(cm_id_priv->msg);
cm_id_priv->msg);
cm_enter_timewait(cm_id_priv); cm_enter_timewait(cm_id_priv);
break; break;
} }
@ -3169,16 +3168,14 @@ static int cm_mra_handler(struct cm_work *work)
case IB_CM_REQ_SENT: case IB_CM_REQ_SENT:
if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) != if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) !=
CM_MSG_RESPONSE_REQ || CM_MSG_RESPONSE_REQ ||
ib_modify_mad(cm_id_priv->av.port->mad_agent, ib_modify_mad(cm_id_priv->msg, timeout))
cm_id_priv->msg, timeout))
goto out; goto out;
cm_id_priv->id.state = IB_CM_MRA_REQ_RCVD; cm_id_priv->id.state = IB_CM_MRA_REQ_RCVD;
break; break;
case IB_CM_REP_SENT: case IB_CM_REP_SENT:
if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) != if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) !=
CM_MSG_RESPONSE_REP || CM_MSG_RESPONSE_REP ||
ib_modify_mad(cm_id_priv->av.port->mad_agent, ib_modify_mad(cm_id_priv->msg, timeout))
cm_id_priv->msg, timeout))
goto out; goto out;
cm_id_priv->id.state = IB_CM_MRA_REP_RCVD; cm_id_priv->id.state = IB_CM_MRA_REP_RCVD;
break; break;
@ -3186,8 +3183,7 @@ static int cm_mra_handler(struct cm_work *work)
if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) != if (IBA_GET(CM_MRA_MESSAGE_MRAED, mra_msg) !=
CM_MSG_RESPONSE_OTHER || CM_MSG_RESPONSE_OTHER ||
cm_id_priv->id.lap_state != IB_CM_LAP_SENT || cm_id_priv->id.lap_state != IB_CM_LAP_SENT ||
ib_modify_mad(cm_id_priv->av.port->mad_agent, ib_modify_mad(cm_id_priv->msg, timeout)) {
cm_id_priv->msg, timeout)) {
if (cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD) if (cm_id_priv->id.lap_state == IB_CM_MRA_LAP_RCVD)
atomic_long_inc(&work->port-> atomic_long_inc(&work->port->
counter_group[CM_RECV_DUPLICATES]. counter_group[CM_RECV_DUPLICATES].
@ -3387,7 +3383,7 @@ static int cm_apr_handler(struct cm_work *work)
goto out; goto out;
} }
cm_id_priv->id.lap_state = IB_CM_LAP_IDLE; cm_id_priv->id.lap_state = IB_CM_LAP_IDLE;
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
cm_queue_work_unlock(cm_id_priv, work); cm_queue_work_unlock(cm_id_priv, work);
return 0; return 0;
out: out:
@ -3715,7 +3711,7 @@ static int cm_sidr_rep_handler(struct cm_work *work)
goto out; goto out;
} }
cm_id_priv->id.state = IB_CM_IDLE; cm_id_priv->id.state = IB_CM_IDLE;
ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); ib_cancel_mad(cm_id_priv->msg);
spin_unlock_irq(&cm_id_priv->lock); spin_unlock_irq(&cm_id_priv->lock);
cm_format_sidr_rep_event(work, cm_id_priv); cm_format_sidr_rep_event(work, cm_id_priv);

View File

@ -2459,16 +2459,18 @@ find_send_wr(struct ib_mad_agent_private *mad_agent_priv,
return NULL; return NULL;
} }
int ib_modify_mad(struct ib_mad_agent *mad_agent, int ib_modify_mad(struct ib_mad_send_buf *send_buf, u32 timeout_ms)
struct ib_mad_send_buf *send_buf, u32 timeout_ms)
{ {
struct ib_mad_agent_private *mad_agent_priv; struct ib_mad_agent_private *mad_agent_priv;
struct ib_mad_send_wr_private *mad_send_wr; struct ib_mad_send_wr_private *mad_send_wr;
unsigned long flags; unsigned long flags;
int active; int active;
mad_agent_priv = container_of(mad_agent, struct ib_mad_agent_private, if (!send_buf)
agent); return -EINVAL;
mad_agent_priv = container_of(send_buf->mad_agent,
struct ib_mad_agent_private, agent);
spin_lock_irqsave(&mad_agent_priv->lock, flags); spin_lock_irqsave(&mad_agent_priv->lock, flags);
mad_send_wr = find_send_wr(mad_agent_priv, send_buf); mad_send_wr = find_send_wr(mad_agent_priv, send_buf);
if (!mad_send_wr || mad_send_wr->status != IB_WC_SUCCESS) { if (!mad_send_wr || mad_send_wr->status != IB_WC_SUCCESS) {
@ -2493,13 +2495,6 @@ int ib_modify_mad(struct ib_mad_agent *mad_agent,
} }
EXPORT_SYMBOL(ib_modify_mad); EXPORT_SYMBOL(ib_modify_mad);
void ib_cancel_mad(struct ib_mad_agent *mad_agent,
struct ib_mad_send_buf *send_buf)
{
ib_modify_mad(mad_agent, send_buf, 0);
}
EXPORT_SYMBOL(ib_cancel_mad);
static void local_completions(struct work_struct *work) static void local_completions(struct work_struct *work)
{ {
struct ib_mad_agent_private *mad_agent_priv; struct ib_mad_agent_private *mad_agent_priv;

View File

@ -1172,7 +1172,6 @@ EXPORT_SYMBOL(ib_sa_unregister_client);
void ib_sa_cancel_query(int id, struct ib_sa_query *query) void ib_sa_cancel_query(int id, struct ib_sa_query *query)
{ {
unsigned long flags; unsigned long flags;
struct ib_mad_agent *agent;
struct ib_mad_send_buf *mad_buf; struct ib_mad_send_buf *mad_buf;
xa_lock_irqsave(&queries, flags); xa_lock_irqsave(&queries, flags);
@ -1180,7 +1179,6 @@ void ib_sa_cancel_query(int id, struct ib_sa_query *query)
xa_unlock_irqrestore(&queries, flags); xa_unlock_irqrestore(&queries, flags);
return; return;
} }
agent = query->port->agent;
mad_buf = query->mad_buf; mad_buf = query->mad_buf;
xa_unlock_irqrestore(&queries, flags); xa_unlock_irqrestore(&queries, flags);
@ -1190,7 +1188,7 @@ void ib_sa_cancel_query(int id, struct ib_sa_query *query)
* sent to the MAD layer and has to be cancelled from there. * sent to the MAD layer and has to be cancelled from there.
*/ */
if (!ib_nl_cancel_request(query)) if (!ib_nl_cancel_request(query))
ib_cancel_mad(agent, mad_buf); ib_cancel_mad(mad_buf);
} }
EXPORT_SYMBOL(ib_sa_cancel_query); EXPORT_SYMBOL(ib_sa_cancel_query);

View File

@ -717,28 +717,27 @@ int ib_post_send_mad(struct ib_mad_send_buf *send_buf,
*/ */
void ib_free_recv_mad(struct ib_mad_recv_wc *mad_recv_wc); void ib_free_recv_mad(struct ib_mad_recv_wc *mad_recv_wc);
/**
* ib_cancel_mad - Cancels an outstanding send MAD operation.
* @mad_agent: Specifies the registration associated with sent MAD.
* @send_buf: Indicates the MAD to cancel.
*
* MADs will be returned to the user through the corresponding
* ib_mad_send_handler.
*/
void ib_cancel_mad(struct ib_mad_agent *mad_agent,
struct ib_mad_send_buf *send_buf);
/** /**
* ib_modify_mad - Modifies an outstanding send MAD operation. * ib_modify_mad - Modifies an outstanding send MAD operation.
* @mad_agent: Specifies the registration associated with sent MAD.
* @send_buf: Indicates the MAD to modify. * @send_buf: Indicates the MAD to modify.
* @timeout_ms: New timeout value for sent MAD. * @timeout_ms: New timeout value for sent MAD.
* *
* This call will reset the timeout value for a sent MAD to the specified * This call will reset the timeout value for a sent MAD to the specified
* value. * value.
*/ */
int ib_modify_mad(struct ib_mad_agent *mad_agent, int ib_modify_mad(struct ib_mad_send_buf *send_buf, u32 timeout_ms);
struct ib_mad_send_buf *send_buf, u32 timeout_ms);
/**
* ib_cancel_mad - Cancels an outstanding send MAD operation.
* @send_buf: Indicates the MAD to cancel.
*
* MADs will be returned to the user through the corresponding
* ib_mad_send_handler.
*/
static inline void ib_cancel_mad(struct ib_mad_send_buf *send_buf)
{
ib_modify_mad(send_buf, 0);
}
/** /**
* ib_create_send_mad - Allocate and initialize a data buffer and work request * ib_create_send_mad - Allocate and initialize a data buffer and work request