All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jack Wang <xjtuwjp-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Sagi Grimberg <sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	oren-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org,
	tzahio-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org
Subject: Re: [PATCH RFC v2 03/10] IB/mlx5, mlx5_core: Support for create_mr and destroy_mr
Date: Thu, 31 Oct 2013 13:52:41 +0100	[thread overview]
Message-ID: <52725299.7020105@gmail.com> (raw)
In-Reply-To: <1383222255-22699-4-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

On 10/31/2013 01:24 PM, Sagi Grimberg wrote:
> Support create_mr and destroy_mr verbs.
> Creating ib_mr may be done for either ib_mr that will
> register regular page lists like alloc_fast_reg_mr routine,
> or indirect ib_mr's that can register other (pre-registered)
> ib_mr's in an indirect manner.
> 
> In addition user may request signature enable, that will mean
> that the created ib_mr may be attached with signature attributes
> (BSF, PSVs).
> 
> Currently we only allow direct/indirect registration modes.
> 
> Signed-off-by: Sagi Grimberg <sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> ---
>  drivers/infiniband/hw/mlx5/main.c            |    2 +
>  drivers/infiniband/hw/mlx5/mlx5_ib.h         |    4 +
>  drivers/infiniband/hw/mlx5/mr.c              |  109 ++++++++++++++++++++++++++
>  drivers/net/ethernet/mellanox/mlx5/core/mr.c |   64 +++++++++++++++
>  include/linux/mlx5/device.h                  |   25 ++++++
>  include/linux/mlx5/driver.h                  |   19 +++++
>  6 files changed, 223 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
> index 3f831de..2e67a37 100644
> --- a/drivers/infiniband/hw/mlx5/main.c
> +++ b/drivers/infiniband/hw/mlx5/main.c
> @@ -1401,9 +1401,11 @@ static int init_one(struct pci_dev *pdev,
>  	dev->ib_dev.get_dma_mr		= mlx5_ib_get_dma_mr;
>  	dev->ib_dev.reg_user_mr		= mlx5_ib_reg_user_mr;
>  	dev->ib_dev.dereg_mr		= mlx5_ib_dereg_mr;
> +	dev->ib_dev.destroy_mr		= mlx5_ib_destroy_mr;
>  	dev->ib_dev.attach_mcast	= mlx5_ib_mcg_attach;
>  	dev->ib_dev.detach_mcast	= mlx5_ib_mcg_detach;
>  	dev->ib_dev.process_mad		= mlx5_ib_process_mad;
> +	dev->ib_dev.create_mr		= mlx5_ib_create_mr;
>  	dev->ib_dev.alloc_fast_reg_mr	= mlx5_ib_alloc_fast_reg_mr;
>  	dev->ib_dev.alloc_fast_reg_page_list = mlx5_ib_alloc_fast_reg_page_list;
>  	dev->ib_dev.free_fast_reg_page_list  = mlx5_ib_free_fast_reg_page_list;
> diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> index 836be91..45d7424 100644
> --- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
> +++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
> @@ -262,6 +262,7 @@ struct mlx5_ib_mr {
>  	int			npages;
>  	struct completion	done;
>  	enum ib_wc_status	status;
> +	struct mlx5_core_sig_ctx    *sig;
>  };
>  
>  struct mlx5_ib_fast_reg_page_list {
> @@ -489,6 +490,9 @@ struct ib_mr *mlx5_ib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
>  				  u64 virt_addr, int access_flags,
>  				  struct ib_udata *udata);
>  int mlx5_ib_dereg_mr(struct ib_mr *ibmr);
> +int mlx5_ib_destroy_mr(struct ib_mr *ibmr);
> +struct ib_mr *mlx5_ib_create_mr(struct ib_pd *pd,
> +				struct ib_mr_init_attr *mr_init_attr);
>  struct ib_mr *mlx5_ib_alloc_fast_reg_mr(struct ib_pd *pd,
>  					int max_page_list_len);
>  struct ib_fast_reg_page_list *mlx5_ib_alloc_fast_reg_page_list(struct ib_device *ibdev,
> diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
> index bd41df9..44f7e46 100644
> --- a/drivers/infiniband/hw/mlx5/mr.c
> +++ b/drivers/infiniband/hw/mlx5/mr.c
> @@ -921,6 +921,115 @@ int mlx5_ib_dereg_mr(struct ib_mr *ibmr)
>  	return 0;
>  }
>  
> +struct ib_mr *mlx5_ib_create_mr(struct ib_pd *pd,
> +				struct ib_mr_init_attr *mr_init_attr)
> +{
> +	struct mlx5_ib_dev *dev = to_mdev(pd->device);
> +	struct mlx5_create_mkey_mbox_in *in;
> +	struct mlx5_ib_mr *mr;
> +	int access_mode, err;
> +	int ndescs = roundup(mr_init_attr->max_reg_descriptors, 4);
> +
> +	mr = kzalloc(sizeof(*mr), GFP_KERNEL);
> +	if (!mr)
> +		return ERR_PTR(-ENOMEM);
> +
> +	in = kzalloc(sizeof(*in), GFP_KERNEL);
> +	if (!in) {
> +		err = -ENOMEM;
> +		goto err_free;
> +	}
> +
> +	in->seg.status = 1 << 6; /* free */
> +	in->seg.xlt_oct_size = cpu_to_be32(ndescs);
> +	in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
> +	in->seg.flags_pd = cpu_to_be32(to_mpd(pd)->pdn);
> +	access_mode = MLX5_ACCESS_MODE_MTT;
> +
> +	if (mr_init_attr->flags & IB_MR_SIGNATURE_EN) {
> +		u32 psv_index[2];
> +
> +		in->seg.flags_pd = cpu_to_be32(be32_to_cpu(in->seg.flags_pd) |
> +							   MLX5_MKEY_BSF_EN);
> +		in->seg.bsfs_octo_size = cpu_to_be32(MLX5_MKEY_BSF_OCTO_SIZE);
> +		mr->sig = kzalloc(sizeof(*mr->sig), GFP_KERNEL);
> +		if (!mr->sig) {
> +			err = -ENOMEM;
> +			goto err_free;
> +		}
> +
> +		/* create mem & wire PSVs */
> +		err = mlx5_core_create_psv(&dev->mdev, to_mpd(pd)->pdn,
> +					   2, psv_index);
> +		if (err)
> +			goto err_free_sig;
> +
> +		access_mode = MLX5_ACCESS_MODE_KLM;
> +		mr->sig->psv_memory.psv_idx = psv_index[0];
> +		mr->sig->psv_wire.psv_idx = psv_index[1];
> +	}
> +
> +	in->seg.flags = MLX5_PERM_UMR_EN | access_mode;
> +	err = mlx5_core_create_mkey(&dev->mdev, &mr->mmr, in, sizeof(*in));
> +	kfree(in);
> +	if (err)
> +		goto err_destroy_psv;
> +
> +	mr->ibmr.lkey = mr->mmr.key;
> +	mr->ibmr.rkey = mr->mmr.key;
> +	mr->umem = NULL;
> +
> +	return &mr->ibmr;
> +
> +err_destroy_psv:
> +	if (mr->sig) {
> +		if (mlx5_core_destroy_psv(&dev->mdev,
> +					  mr->sig->psv_memory.psv_idx))
> +			mlx5_ib_warn(dev, "failed to destroy mem psv %d\n",
> +				     mr->sig->psv_memory.psv_idx);
> +		if (mlx5_core_destroy_psv(&dev->mdev,
> +					  mr->sig->psv_wire.psv_idx))
> +			mlx5_ib_warn(dev, "failed to destroy wire psv %d\n",
> +				     mr->sig->psv_wire.psv_idx);
> +	}
> +err_free_sig:
> +	if (mr->sig)
> +		kfree(mr->sig);
> +err_free:
> +	kfree(mr);
> +	return ERR_PTR(err);
> +}
> +

There are memory leak in this function, you forget to kfree in in error
case.

Jack
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2013-10-31 12:52 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-31 12:24 [PATCH RFC v2 00/10] Introduce Signature feature Sagi Grimberg
     [not found] ` <1383222255-22699-1-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-10-31 12:24   ` [PATCH RFC v2 01/10] IB/core: Introduce protected memory regions Sagi Grimberg
     [not found]     ` <1383222255-22699-2-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-01 17:09       ` Bart Van Assche
     [not found]         ` <5273E03C.3010501-HInyCGIudOg@public.gmane.org>
2013-11-03 12:14           ` Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 02/10] IB/core: Introduce Signature Verbs API Sagi Grimberg
     [not found]     ` <1383222255-22699-3-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-01 15:13       ` Bart Van Assche
     [not found]         ` <5273C4FC.4070708-HInyCGIudOg@public.gmane.org>
2013-11-03 12:15           ` Sagi Grimberg
2013-11-01 18:46       ` Bart Van Assche
     [not found]         ` <5273F6F4.3000300-HInyCGIudOg@public.gmane.org>
2013-11-03 12:15           ` Sagi Grimberg
     [not found]             ` <52763E68.2040605-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-03 14:41               ` Bart Van Assche
     [not found]                 ` <5276608D.2020605-HInyCGIudOg@public.gmane.org>
2013-11-03 16:30                   ` Sagi Grimberg
2013-11-01 22:23       ` Bart Van Assche
     [not found]         ` <527429E7.7010705-HInyCGIudOg@public.gmane.org>
2013-11-03 12:16           ` Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 03/10] IB/mlx5, mlx5_core: Support for create_mr and destroy_mr Sagi Grimberg
     [not found]     ` <1383222255-22699-4-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-10-31 12:52       ` Jack Wang [this message]
     [not found]         ` <52725299.7020105-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-31 12:59           ` Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 04/10] IB/mlx5: Initialize mlx5_ib_qp signature related Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 05/10] IB/mlx5: Break wqe handling to begin & finish routines Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 06/10] IB/mlx5: remove MTT access mode from umr flags helper function Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 07/10] IB/mlx5: Keep mlx5 MRs in a radix tree under device Sagi Grimberg
     [not found]     ` <1383222255-22699-8-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-01 20:46       ` Bart Van Assche
     [not found]         ` <5274131C.90601-HInyCGIudOg@public.gmane.org>
2013-11-03 12:16           ` Sagi Grimberg
     [not found]             ` <52763E88.4050300-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-03 13:40               ` Or Gerlitz
2013-10-31 12:24   ` [PATCH RFC v2 08/10] IB/mlx5: Support IB_WR_REG_SIG_MR Sagi Grimberg
     [not found]     ` <1383222255-22699-9-git-send-email-sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-10-31 13:01       ` Jack Wang
2013-11-01 15:05       ` Bart Van Assche
     [not found]         ` <5273C32E.2020405-HInyCGIudOg@public.gmane.org>
2013-11-03 12:16           ` Sagi Grimberg
2013-11-01 20:37       ` Bart Van Assche
     [not found]         ` <527410F3.6040704-HInyCGIudOg@public.gmane.org>
2013-11-02 19:21           ` Or Gerlitz
     [not found]             ` <CAJZOPZLnyqzzx91ohmW+exy0k8g-FX6reSBCGmh_F2tTGWWOog-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-11-02 21:59               ` Bart Van Assche
     [not found]                 ` <527575D0.9050802-HInyCGIudOg@public.gmane.org>
2013-11-03 12:20                   ` Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 09/10] IB/mlx5: Collect signature error completion Sagi Grimberg
2013-10-31 12:24   ` [PATCH RFC v2 10/10] IB/mlx5: Publish support in signature feature Sagi Grimberg
2013-10-31 12:55   ` [PATCH RFC v2 00/10] Introduce Signature feature Jack Wang
     [not found]     ` <5272535D.4090805-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-31 13:20       ` Sagi Grimberg
     [not found]         ` <52725930.7030702-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-10-31 13:29           ` Jack Wang
2013-11-01 15:03   ` Bart Van Assche
     [not found]     ` <5273C2B6.7010901-HInyCGIudOg@public.gmane.org>
2013-11-02  1:36       ` Nicholas A. Bellinger
     [not found]         ` <1383356167.4216.16.camel-XoQW25Eq2zviZyQQd+hFbcojREIfoBdhmpATvIKMPHk@public.gmane.org>
2013-11-02 21:57           ` Bart Van Assche
     [not found]             ` <52757555.6090907-HInyCGIudOg@public.gmane.org>
2013-11-04 18:41               ` Nicholas A. Bellinger
     [not found]                 ` <1383590471.4216.22.camel-XoQW25Eq2zviZyQQd+hFbcojREIfoBdhmpATvIKMPHk@public.gmane.org>
2013-11-05  9:13                   ` Sagi Grimberg
     [not found]                     ` <5278B6B2.1010006-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2013-11-05 18:30                       ` Nicholas A. Bellinger
2013-11-01 22:06   ` Bart Van Assche
     [not found]     ` <527425DA.7040609-HInyCGIudOg@public.gmane.org>
2013-11-03 12:13       ` Sagi Grimberg
2013-11-03 12:14       ` Sagi Grimberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52725299.7020105@gmail.com \
    --to=xjtuwjp-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=oren-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=sagig-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=tzahio-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.