On Sat, Jan 19, 2019 at 3:19 AM Jason Gunthorpe <jgg@xxxxxxxxxxxx> wrote: > > On Thu, Jan 17, 2019 at 01:54:59PM -0500, Devesh Sharma wrote: > > User space verbs provider library would need chip context. > > Changing the ABI to add chip version details in structure. > > Furthermore, changing the kernel driver ucontext allocation > > code to initialize the abi structure with appropriate values. > > > > As suggested by community, appended the new fields at the > > bottom of the ABI structure and retaining to older fields as > > those were in the older versions. > > > > Keeping the ABI version at 1 and adding a new field in the > > ucontext response structure to hold the component mask. > > The user space library should check pre-defined flags to > > figure out if a certain feature is supported on not. > > > > Signed-off-by: Devesh Sharma <devesh.sharma@xxxxxxxxxxxx> > > drivers/infiniband/hw/bnxt_re/ib_verbs.c | 15 +++++++++++++-- > > include/uapi/rdma/bnxt_re-abi.h | 11 +++++++++++ > > 2 files changed, 24 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c > > index 08c1725..c817b82 100644 > > +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c > > @@ -3692,9 +3692,10 @@ struct ib_ucontext *bnxt_re_alloc_ucontext(struct ib_device *ibdev, > > struct ib_udata *udata) > > { > > struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev); > > + struct bnxt_qplib_dev_attr *dev_attr = &rdev->dev_attr; > > struct bnxt_re_uctx_resp resp; > > struct bnxt_re_ucontext *uctx; > > - struct bnxt_qplib_dev_attr *dev_attr = &rdev->dev_attr; > > + u32 chip_met_rev_num = 0; > > int rc; > > > > dev_dbg(rdev_to_dev(rdev), "ABI version requested %d", > > @@ -3719,7 +3720,17 @@ struct ib_ucontext *bnxt_re_alloc_ucontext(struct ib_device *ibdev, > > } > > spin_lock_init(&uctx->sh_lock); > > > > - resp.dev_id = rdev->en_dev->pdev->devfn; /*Temp, Use idr_alloc instead*/ > > + resp.comp_mask |= BNXT_RE_UCNTX_CMASK_HAVE_CCTX; > > + chip_met_rev_num = rdev->chip_ctx.chip_num; > > + chip_met_rev_num |= ((u32)rdev->chip_ctx.chip_rev & 0xFF) << > > + BNXT_RE_CHIP_ID0_CHIP_REV_SFT; > > + chip_met_rev_num |= ((u32)rdev->chip_ctx.chip_metal & 0xFF) << > > + BNXT_RE_CHIP_ID0_CHIP_MET_SFT; > > + resp.chip_id0 = chip_met_rev_num; > > + /* Future extension of chip info */ > > + resp.chip_id1 = 0; > > + /*Temp, Use idr_alloc instead */ > > + resp.dev_id = rdev->en_dev->pdev->devfn; > > resp.max_qp = rdev->qplib_ctx.qpc_count; > > resp.pg_size = PAGE_SIZE; > > resp.cqe_sz = sizeof(struct cq_base); > [..] > > rc = ib_copy_to_udata(udata, &resp, sizeof(resp)); > > The sizeof is now wrong > Will fix! > > diff --git a/include/uapi/rdma/bnxt_re-abi.h b/include/uapi/rdma/bnxt_re-abi.h > > index a7a6111..92887f8 100644 > > +++ b/include/uapi/rdma/bnxt_re-abi.h > > @@ -44,6 +44,14 @@ > > > > #define BNXT_RE_ABI_VERSION 1 > > > > +#define BNXT_RE_CHIP_ID0_CHIP_NUM_SFT 0x00 > > +#define BNXT_RE_CHIP_ID0_CHIP_REV_SFT 0x10 > > +#define BNXT_RE_CHIP_ID0_CHIP_MET_SFT 0x18 > > > +enum bnxt_re_comp_mask { > > No need to label the enum okay, > > > + BNXT_RE_UCNTX_CMASK_HAVE_CCTX = 0x1ULL > > +}; > > + > > struct bnxt_re_uctx_resp { > > __u32 dev_id; > > __u32 max_qp; > > @@ -51,6 +59,9 @@ struct bnxt_re_uctx_resp { > > __u32 cqe_sz; > > __u32 max_cqd; > > __u32 rsvd; > > + __u64 comp_mask; Surprising, checkpatch did not show any errors. > > __aligned_u64 like everything else please > > Jason