mirror of https://gitee.com/openkylin/linux.git
49 lines
1.0 KiB
C
49 lines
1.0 KiB
C
// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
|
|
/*
|
|
* Copyright(c) 2018 Intel Corporation.
|
|
*
|
|
*/
|
|
|
|
#include "hfi.h"
|
|
#include "verbs.h"
|
|
#include "tid_rdma.h"
|
|
|
|
/**
|
|
* qp_to_rcd - determine the receive context used by a qp
|
|
* @qp - the qp
|
|
*
|
|
* This routine returns the receive context associated
|
|
* with a a qp's qpn.
|
|
*
|
|
* Returns the context.
|
|
*/
|
|
static struct hfi1_ctxtdata *qp_to_rcd(struct rvt_dev_info *rdi,
|
|
struct rvt_qp *qp)
|
|
{
|
|
struct hfi1_ibdev *verbs_dev = container_of(rdi,
|
|
struct hfi1_ibdev,
|
|
rdi);
|
|
struct hfi1_devdata *dd = container_of(verbs_dev,
|
|
struct hfi1_devdata,
|
|
verbs_dev);
|
|
unsigned int ctxt;
|
|
|
|
if (qp->ibqp.qp_num == 0)
|
|
ctxt = 0;
|
|
else
|
|
ctxt = ((qp->ibqp.qp_num >> dd->qos_shift) %
|
|
(dd->n_krcv_queues - 1)) + 1;
|
|
|
|
return dd->rcd[ctxt];
|
|
}
|
|
|
|
int hfi1_qp_priv_init(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
|
struct ib_qp_init_attr *init_attr)
|
|
{
|
|
struct hfi1_qp_priv *qpriv = qp->priv;
|
|
|
|
qpriv->rcd = qp_to_rcd(rdi, qp);
|
|
|
|
return 0;
|
|
}
|