Re: [for-next V3 6/7] RDMA/bnxt_re: Update kernel user abi to pass chip context

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

> 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

> +	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;

__aligned_u64 like everything else please

Jason




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux