|
@@ -216,7 +216,8 @@ static void rxe_qp_init_misc(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
|
|
|
static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
struct ib_qp_init_attr *init,
|
|
|
- struct ib_ucontext *context, struct ib_udata *udata)
|
|
|
+ struct ib_ucontext *context,
|
|
|
+ struct rxe_create_qp_resp __user *uresp)
|
|
|
{
|
|
|
int err;
|
|
|
int wqe_size;
|
|
@@ -241,9 +242,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
if (!qp->sq.queue)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- err = do_mmap_info(rxe, udata, true,
|
|
|
- context, qp->sq.queue->buf,
|
|
|
- qp->sq.queue->buf_size, &qp->sq.queue->ip);
|
|
|
+ err = do_mmap_info(rxe, uresp ? &uresp->sq_mi : NULL, context,
|
|
|
+ qp->sq.queue->buf, qp->sq.queue->buf_size,
|
|
|
+ &qp->sq.queue->ip);
|
|
|
|
|
|
if (err) {
|
|
|
kvfree(qp->sq.queue->buf);
|
|
@@ -274,7 +275,8 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
|
|
|
static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
struct ib_qp_init_attr *init,
|
|
|
- struct ib_ucontext *context, struct ib_udata *udata)
|
|
|
+ struct ib_ucontext *context,
|
|
|
+ struct rxe_create_qp_resp __user *uresp)
|
|
|
{
|
|
|
int err;
|
|
|
int wqe_size;
|
|
@@ -294,9 +296,8 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
if (!qp->rq.queue)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- err = do_mmap_info(rxe, udata, false, context,
|
|
|
- qp->rq.queue->buf,
|
|
|
- qp->rq.queue->buf_size,
|
|
|
+ err = do_mmap_info(rxe, uresp ? &uresp->rq_mi : NULL, context,
|
|
|
+ qp->rq.queue->buf, qp->rq.queue->buf_size,
|
|
|
&qp->rq.queue->ip);
|
|
|
if (err) {
|
|
|
kvfree(qp->rq.queue->buf);
|
|
@@ -322,14 +323,15 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
|
|
|
|
|
|
/* called by the create qp verb */
|
|
|
int rxe_qp_from_init(struct rxe_dev *rxe, struct rxe_qp *qp, struct rxe_pd *pd,
|
|
|
- struct ib_qp_init_attr *init, struct ib_udata *udata,
|
|
|
+ struct ib_qp_init_attr *init,
|
|
|
+ struct rxe_create_qp_resp __user *uresp,
|
|
|
struct ib_pd *ibpd)
|
|
|
{
|
|
|
int err;
|
|
|
struct rxe_cq *rcq = to_rcq(init->recv_cq);
|
|
|
struct rxe_cq *scq = to_rcq(init->send_cq);
|
|
|
struct rxe_srq *srq = init->srq ? to_rsrq(init->srq) : NULL;
|
|
|
- struct ib_ucontext *context = udata ? ibpd->uobject->context : NULL;
|
|
|
+ struct ib_ucontext *context = ibpd->uobject ? ibpd->uobject->context : NULL;
|
|
|
|
|
|
rxe_add_ref(pd);
|
|
|
rxe_add_ref(rcq);
|
|
@@ -344,11 +346,11 @@ int rxe_qp_from_init(struct rxe_dev *rxe, struct rxe_qp *qp, struct rxe_pd *pd,
|
|
|
|
|
|
rxe_qp_init_misc(rxe, qp, init);
|
|
|
|
|
|
- err = rxe_qp_init_req(rxe, qp, init, context, udata);
|
|
|
+ err = rxe_qp_init_req(rxe, qp, init, context, uresp);
|
|
|
if (err)
|
|
|
goto err1;
|
|
|
|
|
|
- err = rxe_qp_init_resp(rxe, qp, init, context, udata);
|
|
|
+ err = rxe_qp_init_resp(rxe, qp, init, context, uresp);
|
|
|
if (err)
|
|
|
goto err2;
|
|
|
|