All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Konstantin Taranov <kotaranov@linux.microsoft.com>
Cc: kotaranov@microsoft.com, sharmaajay@microsoft.com,
	longli@microsoft.com, jgg@ziepe.ca, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH rdma-next v2 2/5] RDMA/mana_ib: Create and destroy rnic adapter
Date: Sun, 4 Feb 2024 14:30:13 +0200	[thread overview]
Message-ID: <20240204123013.GE5400@unreal> (raw)
In-Reply-To: <1706886397-16600-3-git-send-email-kotaranov@linux.microsoft.com>

On Fri, Feb 02, 2024 at 07:06:34AM -0800, Konstantin Taranov wrote:
> This patch adds RNIC creation and destruction.
> If creation of RNIC fails, we support only RAW QPs as they are served by
> ethernet driver.

So please make sure that you are creating RNIC only when you are
supporting it. The idea that some function tries-and-fails with dmesg
errors is not good idea.

Thanks

> 
> Signed-off-by: Konstantin Taranov <kotaranov@linux.microsoft.com>
> ---
>  drivers/infiniband/hw/mana/main.c    | 31 +++++++++++++++++++++++++++++++
>  drivers/infiniband/hw/mana/mana_ib.h | 29 +++++++++++++++++++++++++++++
>  2 files changed, 60 insertions(+)
> 
> diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c
> index c64d569..33cd69e 100644
> --- a/drivers/infiniband/hw/mana/main.c
> +++ b/drivers/infiniband/hw/mana/main.c
> @@ -581,14 +581,31 @@ static void mana_ib_destroy_eqs(struct mana_ib_dev *mdev)
>  
>  void mana_ib_gd_create_rnic_adapter(struct mana_ib_dev *mdev)
>  {
> +	struct mana_rnic_create_adapter_resp resp = {};
> +	struct mana_rnic_create_adapter_req req = {};
> +	struct gdma_context *gc = mdev_to_gc(mdev);
>  	int err;
>  
> +	mdev->adapter_handle = INVALID_MANA_HANDLE;
> +
>  	err = mana_ib_create_eqs(mdev);
>  	if (err) {
>  		ibdev_err(&mdev->ib_dev, "Failed to create EQs for RNIC err %d", err);
>  		goto cleanup;
>  	}
>  
> +	mana_gd_init_req_hdr(&req.hdr, MANA_IB_CREATE_ADAPTER, sizeof(req), sizeof(resp));
> +	req.hdr.req.msg_version = GDMA_MESSAGE_V2;
> +	req.hdr.dev_id = gc->mana_ib.dev_id;
> +	req.notify_eq_id = mdev->fatal_err_eq->id;
> +
> +	err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	if (err) {
> +		ibdev_err(&mdev->ib_dev, "Failed to create RNIC adapter err %d", err);
> +		goto cleanup;
> +	}
> +	mdev->adapter_handle = resp.adapter;
> +
>  	return;
>  
>  cleanup:
> @@ -599,5 +616,19 @@ void mana_ib_gd_create_rnic_adapter(struct mana_ib_dev *mdev)
>  
>  void mana_ib_gd_destroy_rnic_adapter(struct mana_ib_dev *mdev)
>  {
> +	struct mana_rnic_destroy_adapter_resp resp = {};
> +	struct mana_rnic_destroy_adapter_req req = {};
> +	struct gdma_context *gc;
> +
> +	if (!rnic_is_enabled(mdev))
> +		return;
> +
> +	gc = mdev_to_gc(mdev);
> +	mana_gd_init_req_hdr(&req.hdr, MANA_IB_DESTROY_ADAPTER, sizeof(req), sizeof(resp));
> +	req.hdr.dev_id = gc->mana_ib.dev_id;
> +	req.adapter = mdev->adapter_handle;
> +
> +	mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
> +	mdev->adapter_handle = INVALID_MANA_HANDLE;
>  	mana_ib_destroy_eqs(mdev);
>  }
> diff --git a/drivers/infiniband/hw/mana/mana_ib.h b/drivers/infiniband/hw/mana/mana_ib.h
> index a4b94ee..96454cf 100644
> --- a/drivers/infiniband/hw/mana/mana_ib.h
> +++ b/drivers/infiniband/hw/mana/mana_ib.h
> @@ -48,6 +48,7 @@ struct mana_ib_adapter_caps {
>  struct mana_ib_dev {
>  	struct ib_device ib_dev;
>  	struct gdma_dev *gdma_dev;
> +	mana_handle_t adapter_handle;
>  	struct gdma_queue *fatal_err_eq;
>  	struct mana_ib_adapter_caps adapter_caps;
>  };
> @@ -115,6 +116,8 @@ struct mana_ib_rwq_ind_table {
>  
>  enum mana_ib_command_code {
>  	MANA_IB_GET_ADAPTER_CAP = 0x30001,
> +	MANA_IB_CREATE_ADAPTER  = 0x30002,
> +	MANA_IB_DESTROY_ADAPTER = 0x30003,
>  };
>  
>  struct mana_ib_query_adapter_caps_req {
> @@ -143,6 +146,32 @@ struct mana_ib_query_adapter_caps_resp {
>  	u32 max_inline_data_size;
>  }; /* HW Data */
>  
> +struct mana_rnic_create_adapter_req {
> +	struct gdma_req_hdr hdr;
> +	u32 notify_eq_id;
> +	u32 reserved;
> +	u64 feature_flags;
> +}; /*HW Data */
> +
> +struct mana_rnic_create_adapter_resp {
> +	struct gdma_resp_hdr hdr;
> +	mana_handle_t adapter;
> +}; /* HW Data */
> +
> +struct mana_rnic_destroy_adapter_req {
> +	struct gdma_req_hdr hdr;
> +	mana_handle_t adapter;
> +}; /*HW Data */
> +
> +struct mana_rnic_destroy_adapter_resp {
> +	struct gdma_resp_hdr hdr;
> +}; /* HW Data */
> +
> +static inline bool rnic_is_enabled(struct mana_ib_dev *mdev)
> +{
> +	return mdev->adapter_handle != INVALID_MANA_HANDLE;
> +}
> +
>  static inline struct gdma_context *mdev_to_gc(struct mana_ib_dev *mdev)
>  {
>  	return mdev->gdma_dev->gdma_context;
> -- 
> 1.8.3.1
> 

  reply	other threads:[~2024-02-04 12:30 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-02 15:06 [PATCH rdma-next v2 0/5] RDMA/mana_ib: Enable RNIC adapter and populate it with GIDs Konstantin Taranov
2024-02-02 15:06 ` [PATCH rdma-next v2 1/5] RDMA/mana_ib: Add EQ creation for rnic adapter Konstantin Taranov
2024-02-04 12:25   ` Leon Romanovsky
2024-02-02 15:06 ` [PATCH rdma-next v2 2/5] RDMA/mana_ib: Create and destroy " Konstantin Taranov
2024-02-04 12:30   ` Leon Romanovsky [this message]
2024-02-04 15:50     ` [EXTERNAL] " Konstantin Taranov
2024-02-04 16:51       ` Leon Romanovsky
2024-02-04 17:17         ` Konstantin Taranov
2024-02-05  7:54           ` Leon Romanovsky
2024-02-05  9:15             ` Konstantin Taranov
2024-02-05  9:57               ` Leon Romanovsky
2024-02-06 14:20                 ` Konstantin Taranov
2024-02-06 14:32                   ` Jason Gunthorpe
2024-02-02 15:06 ` [PATCH rdma-next v2 3/5] RDMA/mana_ib: Implement port parameters Konstantin Taranov
2024-02-02 15:06 ` [PATCH rdma-next v2 4/5] RDMA/mana_ib: Enable RoCE on port 1 Konstantin Taranov
2024-02-02 15:06 ` [PATCH rdma-next v2 5/5] RDMA/mana_ib: Adding and deleting GIDs Konstantin Taranov
2024-02-04 12:43   ` Leon Romanovsky

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=20240204123013.GE5400@unreal \
    --to=leon@kernel.org \
    --cc=jgg@ziepe.ca \
    --cc=kotaranov@linux.microsoft.com \
    --cc=kotaranov@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=longli@microsoft.com \
    --cc=sharmaajay@microsoft.com \
    /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.