All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Konstantin Taranov <kotaranov@linux.microsoft.com>
Cc: kotaranov@microsoft.com, sharmaajay@microsoft.com,
	longli@microsoft.com, jgg@ziepe.ca, leon@kernel.org,
	linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH rdma-next v3 4/6] RDMA/mana_ib: enable RoCE on port 1
Date: Mon, 22 Apr 2024 12:37:28 -0700	[thread overview]
Message-ID: <20240422193728.GA44715@dev-arch.thelio-3990X> (raw)
In-Reply-To: <1712738551-22075-5-git-send-email-kotaranov@linux.microsoft.com>

Hi Konstantin,

On Wed, Apr 10, 2024 at 01:42:29AM -0700, Konstantin Taranov wrote:
> From: Konstantin Taranov <kotaranov@microsoft.com>
> 
> Set netdev and RoCEv2 flag to enable GID population on port 1.
> Use GIDs of the master netdev. As mc->ports[] stores slave devices,
> use a helper to get the master netdev.
> 
> Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
> ---
>  drivers/infiniband/hw/mana/device.c | 15 +++++++++++++++
>  drivers/infiniband/hw/mana/main.c   | 15 +++++++++++----
>  2 files changed, 26 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c
> index 47547a962b19..e7981301d10b 100644
> --- a/drivers/infiniband/hw/mana/device.c
> +++ b/drivers/infiniband/hw/mana/device.c
> @@ -53,6 +53,7 @@ static int mana_ib_probe(struct auxiliary_device *adev,
>  {
>  	struct mana_adev *madev = container_of(adev, struct mana_adev, adev);
>  	struct gdma_dev *mdev = madev->mdev;
> +	struct net_device *upper_ndev;
>  	struct mana_context *mc;
>  	struct mana_ib_dev *dev;
>  	int ret;
> @@ -79,6 +80,20 @@ static int mana_ib_probe(struct auxiliary_device *adev,
>  	dev->ib_dev.num_comp_vectors = 1;
>  	dev->ib_dev.dev.parent = mdev->gdma_context->dev;
>  
> +	rcu_read_lock(); /* required to get upper dev */
> +	upper_ndev = netdev_master_upper_dev_get_rcu(mc->ports[0]);
> +	if (!upper_ndev) {
> +		rcu_read_unlock();
> +		ibdev_err(&dev->ib_dev, "Failed to get master netdev");
> +		goto free_ib_device;
> +	}

Clang now warns (or errors with CONFIG_WERROR):

  drivers/infiniband/hw/mana/device.c:88:6: error: variable 'ret' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
     88 |         if (!upper_ndev) {
        |             ^~~~~~~~~~~
  drivers/infiniband/hw/mana/device.c:150:9: note: uninitialized use occurs here
    150 |         return ret;
        |                ^~~
  drivers/infiniband/hw/mana/device.c:88:2: note: remove the 'if' if its condition is always false
     88 |         if (!upper_ndev) {
        |         ^~~~~~~~~~~~~~~~~~
     89 |                 rcu_read_unlock();
        |                 ~~~~~~~~~~~~~~~~~~
     90 |                 ibdev_err(&dev->ib_dev, "Failed to get master netdev");
        |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     91 |                 goto free_ib_device;
        |                 ~~~~~~~~~~~~~~~~~~~~
     92 |         }
        |         ~
  drivers/infiniband/hw/mana/device.c:62:9: note: initialize the variable 'ret' to silence this warning
     62 |         int ret;
        |                ^
        |                 = 0
  1 error generated.

I could not really find a consistent return code for when
netdev_master_upper_dev_get_rcu() fails. -ENODEV?

Cheers,
Nathan

> +	ret = ib_device_set_netdev(&dev->ib_dev, upper_ndev, 1);
> +	rcu_read_unlock();
> +	if (ret) {
> +		ibdev_err(&dev->ib_dev, "Failed to set ib netdev, ret %d", ret);
> +		goto free_ib_device;
> +	}
> +
>  	ret = mana_gd_register_device(&mdev->gdma_context->mana_ib);
>  	if (ret) {
>  		ibdev_err(&dev->ib_dev, "Failed to register device, ret %d",
> diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c
> index 29550f2173ff..7a9d7e13b7b1 100644
> --- a/drivers/infiniband/hw/mana/main.c
> +++ b/drivers/infiniband/hw/mana/main.c
> @@ -527,11 +527,18 @@ int mana_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vma)
>  int mana_ib_get_port_immutable(struct ib_device *ibdev, u32 port_num,
>  			       struct ib_port_immutable *immutable)
>  {
> -	/*
> -	 * This version only support RAW_PACKET
> -	 * other values need to be filled for other types
> -	 */
> +	struct ib_port_attr attr;
> +	int err;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
> +	if (err)
> +		return err;
> +
> +	immutable->pkey_tbl_len = attr.pkey_tbl_len;
> +	immutable->gid_tbl_len = attr.gid_tbl_len;
>  	immutable->core_cap_flags = RDMA_CORE_PORT_RAW_PACKET;
> +	if (port_num == 1)
> +		immutable->core_cap_flags |= RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
>  
>  	return 0;
>  }
> -- 
> 2.43.0
> 

  reply	other threads:[~2024-04-22 19:37 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-10  8:42 [PATCH rdma-next v3 0/6] RDMA/mana_ib: Enable RNIC adapter and populate it with GIDs Konstantin Taranov
2024-04-10  8:42 ` [PATCH rdma-next v3 1/6] RDMA/mana_ib: Add EQ creation for rnic adapter Konstantin Taranov
2024-04-10  8:42 ` [PATCH rdma-next v3 2/6] RDMA/mana_ib: Create and destroy " Konstantin Taranov
2024-04-10  8:42 ` [PATCH rdma-next v3 3/6] RDMA/mana_ib: implement port parameters Konstantin Taranov
2024-04-10  8:42 ` [PATCH rdma-next v3 4/6] RDMA/mana_ib: enable RoCE on port 1 Konstantin Taranov
2024-04-22 19:37   ` Nathan Chancellor [this message]
2024-04-23  7:15     ` Konstantin Taranov
2024-04-23 11:44       ` Jason Gunthorpe
2024-04-10  8:42 ` [PATCH rdma-next v3 5/6] RDMA/mana_ib: adding and deleting GIDs Konstantin Taranov
2024-04-10  8:42 ` [PATCH rdma-next v3 6/6] RDMA/mana_ib: Configure mac address in RNIC Konstantin Taranov
2024-04-16 11:56 ` [PATCH rdma-next v3 0/6] RDMA/mana_ib: Enable RNIC adapter and populate it with GIDs 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=20240422193728.GA44715@dev-arch.thelio-3990X \
    --to=nathan@kernel.org \
    --cc=jgg@ziepe.ca \
    --cc=kotaranov@linux.microsoft.com \
    --cc=kotaranov@microsoft.com \
    --cc=leon@kernel.org \
    --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.