[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240626054748.GN29266@unreal>
Date: Wed, 26 Jun 2024 08:47:48 +0300
From: Leon Romanovsky <leon@...nel.org>
To: Konstantin Taranov <kotaranov@...ux.microsoft.com>
Cc: kotaranov@...rosoft.com, weh@...rosoft.com, sharmaajay@...rosoft.com,
longli@...rosoft.com, jgg@...pe.ca, linux-rdma@...r.kernel.org,
linux-netdev <netdev@...r.kernel.org>
Subject: Re: [PATCH rdma-next 1/1] RDMA/mana_ib: Set correct device into ib
On Tue, Jun 25, 2024 at 03:28:27AM -0700, Konstantin Taranov wrote:
> From: Konstantin Taranov <kotaranov@...rosoft.com>
>
> When mc->ports[0] is not slave, use it in the set_netdev.
> When mana is used in netvsc, the stored net devices in mana
> are slaves and GIDs should be taken from their master devices.
> In the baremetal case, the mc->ports devices will not be slaves.
I wonder, why do you have "... | IFF_SLAVE" in __netvsc_vf_setup() in a
first place? Isn't IFF_SLAVE is supposed to be set by bond driver?
>
> Fixes: 8b184e4f1c32 ("RDMA/mana_ib: Enable RoCE on port 1")
> Signed-off-by: Konstantin Taranov <kotaranov@...rosoft.com>
> ---
> drivers/infiniband/hw/mana/device.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c
> index b07a8e2e838f..5395306a86e8 100644
> --- a/drivers/infiniband/hw/mana/device.c
> +++ b/drivers/infiniband/hw/mana/device.c
> @@ -11,6 +11,8 @@ MODULE_DESCRIPTION("Microsoft Azure Network Adapter IB driver");
> MODULE_LICENSE("GPL");
> MODULE_IMPORT_NS(NET_MANA);
>
> +#define mana_ndev_is_slave(dev) (((dev)->flags & IFF_SLAVE) == IFF_SLAVE)
There is no need in macro for one line of code and there is no need in "==",
as the result will be boolean.
> +
> static const struct ib_device_ops mana_ib_dev_ops = {
> .owner = THIS_MODULE,
> .driver_id = RDMA_DRIVER_MANA,
> @@ -56,7 +58,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 net_device *ndev;
> struct mana_context *mc;
> struct mana_ib_dev *dev;
> u8 mac_addr[ETH_ALEN];
> @@ -85,16 +87,19 @@ static int mana_ib_probe(struct auxiliary_device *adev,
> 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) {
> + if (mana_ndev_is_slave(mc->ports[0]))
> + ndev = netdev_master_upper_dev_get_rcu(mc->ports[0]);
> + else
> + ndev = mc->ports[0];
> + if (!ndev) {
> rcu_read_unlock();
> ret = -ENODEV;
> - ibdev_err(&dev->ib_dev, "Failed to get master netdev");
> + ibdev_err(&dev->ib_dev, "Failed to get netdev for port 1");
> goto free_ib_device;
> }
> - ether_addr_copy(mac_addr, upper_ndev->dev_addr);
> - addrconf_addr_eui48((u8 *)&dev->ib_dev.node_guid, upper_ndev->dev_addr);
> - ret = ib_device_set_netdev(&dev->ib_dev, upper_ndev, 1);
> + ether_addr_copy(mac_addr, ndev->dev_addr);
> + addrconf_addr_eui48((u8 *)&dev->ib_dev.node_guid, ndev->dev_addr);
> + ret = ib_device_set_netdev(&dev->ib_dev, ndev, 1);
> rcu_read_unlock();
> if (ret) {
> ibdev_err(&dev->ib_dev, "Failed to set ib netdev, ret %d", ret);
> --
> 2.43.0
>
>
Powered by blists - more mailing lists