From: Mark Zhang <markz@xxxxxxxxxxxx> In the request handler of the response side, Set flow label of the recv_wc if it is not net. It will be used for all messages sent by the responder. Signed-off-by: Mark Zhang <markz@xxxxxxxxxxxx> Reviewed-by: Maor Gottlieb <maorg@xxxxxxxxxxxx> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- drivers/infiniband/core/cm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index bbbfa77dbce7..4ab2f71da522 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c @@ -2039,6 +2039,7 @@ static int cm_req_handler(struct cm_work *work) struct cm_req_msg *req_msg; const struct ib_global_route *grh; const struct ib_gid_attr *gid_attr; + struct ib_grh *ibgrh; int ret; req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; @@ -2048,6 +2049,12 @@ static int cm_req_handler(struct cm_work *work) if (IS_ERR(cm_id_priv)) return PTR_ERR(cm_id_priv); + ibgrh = work->mad_recv_wc->recv_buf.grh; + if (!(be32_to_cpu(ibgrh->version_tclass_flow) & IB_GRH_FLOWLABEL_MASK)) + ibgrh->version_tclass_flow |= + cpu_to_be32(IBA_GET(CM_REQ_PRIMARY_FLOW_LABEL, + req_msg)); + cm_id_priv->id.remote_id = cpu_to_be32(IBA_GET(CM_REQ_LOCAL_COMM_ID, req_msg)); cm_id_priv->id.service_id = -- 2.24.1