IB/{hw,sw}: Remove 'uobject->context' dependency in object creation APIs
Now when we have the udata passed to all the ib_xxx object creation APIs and the additional macro 'rdma_udata_to_drv_context' to get the ib_ucontext from ib_udata stored in uverbs_attr_bundle, we can finally start to remove the dependency of the drivers in the ib_xxx->uobject->context. Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Bu işleme şunda yer alıyor:

işlemeyi yapan:
Jason Gunthorpe

ebeveyn
730623f4a5
işleme
8994445054
@@ -53,6 +53,7 @@
|
||||
#include <rdma/ib_verbs.h>
|
||||
#include <rdma/ib_hdrs.h>
|
||||
#include <rdma/opa_addr.h>
|
||||
#include <rdma/uverbs_ioctl.h>
|
||||
#include "qp.h"
|
||||
#include "vt.h"
|
||||
#include "trace.h"
|
||||
@@ -956,6 +957,8 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
||||
size_t sg_list_sz;
|
||||
struct ib_qp *ret = ERR_PTR(-ENOMEM);
|
||||
struct rvt_dev_info *rdi = ib_to_rvt(ibpd->device);
|
||||
struct rvt_ucontext *ucontext = rdma_udata_to_drv_context(
|
||||
udata, struct rvt_ucontext, ibucontext);
|
||||
void *priv = NULL;
|
||||
size_t sqsize;
|
||||
|
||||
@@ -1129,7 +1132,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
||||
u32 s = sizeof(struct rvt_rwq) + qp->r_rq.size * sz;
|
||||
|
||||
qp->ip = rvt_create_mmap_info(rdi, s,
|
||||
ibpd->uobject->context,
|
||||
&ucontext->ibucontext,
|
||||
qp->r_rq.wq);
|
||||
if (!qp->ip) {
|
||||
ret = ERR_PTR(-ENOMEM);
|
||||
|
@@ -48,6 +48,7 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <rdma/uverbs_ioctl.h>
|
||||
|
||||
#include "srq.h"
|
||||
#include "vt.h"
|
||||
@@ -77,6 +78,8 @@ struct ib_srq *rvt_create_srq(struct ib_pd *ibpd,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
struct rvt_dev_info *dev = ib_to_rvt(ibpd->device);
|
||||
struct rvt_ucontext *ucontext = rdma_udata_to_drv_context(
|
||||
udata, struct rvt_ucontext, ibucontext);
|
||||
struct rvt_srq *srq;
|
||||
u32 sz;
|
||||
struct ib_srq *ret;
|
||||
@@ -119,7 +122,7 @@ struct ib_srq *rvt_create_srq(struct ib_pd *ibpd,
|
||||
u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz;
|
||||
|
||||
srq->ip =
|
||||
rvt_create_mmap_info(dev, s, ibpd->uobject->context,
|
||||
rvt_create_mmap_info(dev, s, &ucontext->ibucontext,
|
||||
srq->rq.wq);
|
||||
if (!srq->ip) {
|
||||
ret = ERR_PTR(-ENOMEM);
|
||||
|
@@ -284,10 +284,6 @@ static int rvt_query_gid(struct ib_device *ibdev, u8 port_num,
|
||||
&gid->global.interface_id);
|
||||
}
|
||||
|
||||
struct rvt_ucontext {
|
||||
struct ib_ucontext ibucontext;
|
||||
};
|
||||
|
||||
static inline struct rvt_ucontext *to_iucontext(struct ib_ucontext
|
||||
*ibucontext)
|
||||
{
|
||||
|
@@ -35,6 +35,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <rdma/uverbs_ioctl.h>
|
||||
|
||||
#include "rxe.h"
|
||||
#include "rxe_loc.h"
|
||||
@@ -343,7 +344,8 @@ int rxe_qp_from_init(struct rxe_dev *rxe, struct rxe_qp *qp, struct rxe_pd *pd,
|
||||
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 rxe_ucontext *ucontext =
|
||||
rdma_udata_to_drv_context(udata, struct rxe_ucontext, ibuc);
|
||||
|
||||
rxe_add_ref(pd);
|
||||
rxe_add_ref(rcq);
|
||||
@@ -358,11 +360,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, uresp);
|
||||
err = rxe_qp_init_req(rxe, qp, init, &ucontext->ibuc, uresp);
|
||||
if (err)
|
||||
goto err1;
|
||||
|
||||
err = rxe_qp_init_resp(rxe, qp, init, context, uresp);
|
||||
err = rxe_qp_init_resp(rxe, qp, init, &ucontext->ibuc, uresp);
|
||||
if (err)
|
||||
goto err2;
|
||||
|
||||
|
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <net/addrconf.h>
|
||||
#include <rdma/uverbs_ioctl.h>
|
||||
#include "rxe.h"
|
||||
#include "rxe_loc.h"
|
||||
#include "rxe_queue.h"
|
||||
@@ -320,8 +321,9 @@ static struct ib_srq *rxe_create_srq(struct ib_pd *ibpd,
|
||||
int err;
|
||||
struct rxe_dev *rxe = to_rdev(ibpd->device);
|
||||
struct rxe_pd *pd = to_rpd(ibpd);
|
||||
struct rxe_ucontext *ucontext =
|
||||
rdma_udata_to_drv_context(udata, struct rxe_ucontext, ibuc);
|
||||
struct rxe_srq *srq;
|
||||
struct ib_ucontext *context = udata ? ibpd->uobject->context : NULL;
|
||||
struct rxe_create_srq_resp __user *uresp = NULL;
|
||||
|
||||
if (udata) {
|
||||
@@ -344,7 +346,7 @@ static struct ib_srq *rxe_create_srq(struct ib_pd *ibpd,
|
||||
rxe_add_ref(pd);
|
||||
srq->pd = pd;
|
||||
|
||||
err = rxe_srq_from_init(rxe, srq, init, context, uresp);
|
||||
err = rxe_srq_from_init(rxe, srq, init, &ucontext->ibuc, uresp);
|
||||
if (err)
|
||||
goto err2;
|
||||
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle