From: Leon Romanovsky <leon@kernel.org>
To: Konstantin Taranov <kotaranov@microsoft.com>
Cc: Konstantin Taranov <kotaranov@linux.microsoft.com>,
Wei Hu <weh@microsoft.com>,
"sharmaajay@microsoft.com" <sharmaajay@microsoft.com>,
Long Li <longli@microsoft.com>, "jgg@ziepe.ca" <jgg@ziepe.ca>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
linux-netdev <netdev@vger.kernel.org>
Subject: Re: [PATCH rdma-next 1/1] RDMA/mana_ib: Set correct device into ib
Date: Wed, 26 Jun 2024 15:11:18 +0300 [thread overview]
Message-ID: <20240626121118.GP29266@unreal> (raw)
In-Reply-To: <PAXPR83MB0559F4678E73B0091A8ADFBBB4D62@PAXPR83MB0559.EURPRD83.prod.outlook.com>
On Wed, Jun 26, 2024 at 09:05:05AM +0000, Konstantin Taranov wrote:
> > > 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?
> >
>
> I guess it is just a valid use of the IFF_SLAVE bit. In the bond case it is also set
> as a BOND netdev. The IFF_SLAVE helps to show users that another master
> netdev should be used for networking. But I am not an expert in netvsc.
The thing is that netvsc is virtual device like many others, but it is
the only one who uses IFF_SLAVE bit. The comment around that bit says
"slave of a load balancer.", which is not the case according to the
Hyper-V documentation.
https://learn.microsoft.com/en-us/windows-hardware/drivers/network/overview-of-hyper-v
You will need to get Ack from netdev maintainers to rely on IFF_SLAVE
bit in the way you are relying on it now.
>
> Actually, another alternative solution for mana_ib is always set the slave device,
> but in the GID mgmt code we need the following patch. The problem is that it may require
> testing/confirmation from other ib providers as in the worst case some GIDs will not be listed.
is_eth_active_slave_of_bonding_rcu() is for bonding.
>
> diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c
> index d5131b3ba8ab..0f20b4e2d1c2 100644
> --- a/drivers/infiniband/core/roce_gid_mgmt.c
> +++ b/drivers/infiniband/core/roce_gid_mgmt.c
> @@ -141,6 +141,8 @@ static enum bonding_slave_state is_eth_active_slave_of_bonding_rcu(struct net_de
> return BONDING_SLAVE_STATE_NA;
> }
>
> +#define netdev_is_slave(dev) (((dev)->flags & IFF_SLAVE) == IFF_SLAVE)
> +
> #define REQUIRED_BOND_STATES (BONDING_SLAVE_STATE_ACTIVE | \
> BONDING_SLAVE_STATE_NA)
> static bool
> @@ -157,11 +159,14 @@ is_eth_port_of_netdev_filter(struct ib_device *ib_dev, u32 port,
> real_dev = rdma_vlan_dev_real_dev(cookie);
> if (!real_dev)
> real_dev = cookie;
> -
> + /*
> + * When rdma netdevice is used in netvsc, the master netdevice should
> + * be considered for GIDs. Therefore, ignore slave rdma netdevices.
> + */
> res = ((rdma_is_upper_dev_rcu(rdma_ndev, cookie) &&
> (is_eth_active_slave_of_bonding_rcu(rdma_ndev, real_dev) &
> REQUIRED_BOND_STATES)) ||
> - real_dev == rdma_ndev);
> + (real_dev == rdma_ndev && !netdev_is_slave(real_dev)));
>
> rcu_read_unlock();
> return res;
> @@ -211,12 +216,14 @@ is_ndev_for_default_gid_filter(struct ib_device *ib_dev, u32 port,
>
> /*
> * When rdma netdevice is used in bonding, bonding master netdevice
> - * should be considered for default GIDs. Therefore, ignore slave rdma
> - * netdevices when bonding is considered.
> + * should be considered for default GIDs.
> + * When rdma netdevice is used in netvsc, the master netdevice should
> + * be considered for defauld GIDs. Therefore, ignore slave rdma
> + * netdevices.
> * Additionally when event(cookie) netdevice is bond master device,
> * make sure that it the upper netdevice of rdma netdevice.
> */
> - res = ((cookie_ndev == rdma_ndev && !netif_is_bond_slave(rdma_ndev)) ||
> + res = ((cookie_ndev == rdma_ndev && !netdev_is_slave(rdma_ndev)) ||
> (netif_is_bond_master(cookie_ndev) &&
> rdma_is_upper_dev_rcu(rdma_ndev, cookie_ndev)));
>
> > > +#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.
> >
>
> Sure, can address in v2. I just saw a similar macro in another kernel file.
I grepped too and this is why it caused me to wonder why it is not used
except small number of places.
Thanks
>
>
next prev parent reply other threads:[~2024-06-26 12:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-25 10:28 [PATCH rdma-next 1/1] RDMA/mana_ib: Set correct device into ib Konstantin Taranov
2024-06-26 5:47 ` Leon Romanovsky
2024-06-26 9:05 ` Konstantin Taranov
2024-06-26 12:11 ` Leon Romanovsky [this message]
2024-06-26 15:27 ` Stephen Hemminger
2024-06-26 15:33 ` Leon Romanovsky
2024-06-26 16:10 ` Stephen Hemminger
2024-06-26 18:19 ` Konstantin Taranov
2024-06-26 18:29 ` Haiyang Zhang
2024-06-27 9:57 ` Leon Romanovsky
2024-06-27 10:44 ` Konstantin Taranov
2024-06-27 15:27 ` Stephen Hemminger
2024-11-21 0:03 ` Long Li
2024-11-25 15:56 ` Parav Pandit
2024-11-25 20:10 ` Leon Romanovsky
2024-11-27 19:46 ` [EXTERNAL] " Long Li
2024-11-28 9:39 ` Leon Romanovsky
2024-12-03 18:32 ` Long Li
2025-02-07 21:39 ` Long Li
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=20240626121118.GP29266@unreal \
--to=leon@kernel.org \
--cc=jgg@ziepe.ca \
--cc=kotaranov@linux.microsoft.com \
--cc=kotaranov@microsoft.com \
--cc=linux-rdma@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=netdev@vger.kernel.org \
--cc=sharmaajay@microsoft.com \
--cc=weh@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.