All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leonro@nvidia.com>
To: Michael Guralnik <michaelgur@nvidia.com>
Cc: <jgg@nvidia.com>, <linux-rdma@vger.kernel.org>,
	<mbloch@nvidia.com>, <cmeiohas@nvidia.com>, <msanalla@nvidia.com>,
	<dsahern@gmail.com>
Subject: Re: [PATCH v3 rdma-next 6/7] RDMA/nldev: Add support for RDMA monitoring
Date: Tue, 10 Sep 2024 14:09:14 +0300	[thread overview]
Message-ID: <20240910110914.GX4026@unreal> (raw)
In-Reply-To: <20240909173025.30422-7-michaelgur@nvidia.com>

On Mon, Sep 09, 2024 at 08:30:24PM +0300, Michael Guralnik wrote:
> From: Chiara Meiohas <cmeiohas@nvidia.com>
> 
> Introduce a new netlink command to allow rdma event monitoring.
> The rdma events supported now are IB device
> registration/unregistration and net device attachment/detachment.
> 
> Example output of rdma monitor and the commands which trigger
> the events:
> 
> $ rdma monitor
> $ rmmod mlx5_ib
> [UNREGISTER]	ibdev_idx 1 ibdev rocep8s0f1
> [UNREGISTER]	ibdev_idx 0 ibdev rocep8s0f0
> 
> $ modprobe mlx5_ib
> [REGISTER]	ibdev_idx 2 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 2 ibdev mlx5_0 port 1 netdev_idx 4 netdev eth2
> [REGISTER]	ibdev_idx 3 ibdev mlx5_1
> [NETDEV_ATTACH]	ibdev_idx 3 ibdev mlx5_1 port 1 netdev_idx 5 netdev eth3
> 
> $ devlink dev eswitch set pci/0000:08:00.0 mode switchdev
> [UNREGISTER]	ibdev_idx 2 ibdev rocep8s0f0
> [REGISTER]	ibdev_idx 4 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 4 ibdev mlx5_0 port 30 netdev_idx 4 netdev eth2
> 
> $ echo 4 > /sys/class/net/eth2/device/sriov_numvfs
> [NETDEV_ATTACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 2 netdev_idx 7 netdev eth4
> [NETDEV_ATTACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 3 netdev_idx 8 netdev eth5
> [NETDEV_ATTACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 4 netdev_idx 9 netdev eth6
> [NETDEV_ATTACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 5 netdev_idx 10 netdev eth7
> [REGISTER]	ibdev_idx 5 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 5 ibdev mlx5_0 port 1 netdev_idx 11 netdev eth8
> [REGISTER]	ibdev_idx 6 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 6 ibdev mlx5_0 port 1 netdev_idx 12 netdev eth9
> [REGISTER]	ibdev_idx 7 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 7 ibdev mlx5_0 port 1 netdev_idx 13 netdev eth10
> [REGISTER]	ibdev_idx 8 ibdev mlx5_0
> [NETDEV_ATTACH]	ibdev_idx 8 ibdev mlx5_0 port 1 netdev_idx 14 netdev eth11
> 
> $ echo 0 > /sys/class/net/eth2/device/sriov_numvfs
> [UNREGISTER]	ibdev_idx 5 ibdev rocep8s0f0v0
> [UNREGISTER]	ibdev_idx 6 ibdev rocep8s0f0v1
> [UNREGISTER]	ibdev_idx 7 ibdev rocep8s0f0v2
> [UNREGISTER]	ibdev_idx 8 ibdev rocep8s0f0v3
> [NETDEV_DETACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 2
> [NETDEV_DETACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 3
> [NETDEV_DETACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 4
> [NETDEV_DETACH]	ibdev_idx 4 ibdev rdmap8s0f0 port 5
> 
> Signed-off-by: Chiara Meiohas <cmeiohas@nvidia.com>
> Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
> Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
> ---
>  drivers/infiniband/core/device.c  |  38 +++++++++
>  drivers/infiniband/core/netlink.c |   1 +
>  drivers/infiniband/core/nldev.c   | 124 ++++++++++++++++++++++++++++++
>  include/rdma/rdma_netlink.h       |  12 +++
>  include/uapi/rdma/rdma_netlink.h  |  15 ++++
>  5 files changed, 190 insertions(+)

<...>

>  	/* Expedite removing unregistered pointers from the hash table */
>  	free_netdevs(ib_dev);
> @@ -2159,6 +2186,7 @@ static void add_ndev_hash(struct ib_port_data *pdata)
>  int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,
>  			 u32 port)
>  {
> +	enum rdma_nl_notify_event_type etype;
>  	struct net_device *old_ndev;
>  	struct ib_port_data *pdata;
>  	unsigned long flags;
> @@ -2190,6 +2218,16 @@ int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,
>  	spin_unlock_irqrestore(&pdata->netdev_lock, flags);
>  
>  	add_ndev_hash(pdata);
> +
> +	down_read(&devices_rwsem);
> +	if (xa_get_mark(&devices, ib_dev->index, DEVICE_REGISTERED) &&
> +	    xa_load(&devices, ib_dev->index) == ib_dev) {
> +		etype = ndev ?
> +			RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;
> +		rdma_nl_notify_event(ib_dev, port, etype);
> +	}
> +	up_read(&devices_rwsem);

There is no need in this locking, let's rewrite the following code
without it. We are in -rc7, I'll add this hunk when applying.

Thanks

diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index d571b78d1bcc..3be66dd7b226 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -2219,14 +2219,12 @@ int ib_device_set_netdev(struct ib_device *ib_dev, struct net_device *ndev,
 
 	add_ndev_hash(pdata);
 
-	down_read(&devices_rwsem);
-	if (xa_get_mark(&devices, ib_dev->index, DEVICE_REGISTERED) &&
-	    xa_load(&devices, ib_dev->index) == ib_dev) {
-		etype = ndev ?
-			RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;
-		rdma_nl_notify_event(ib_dev, port, etype);
-	}
-	up_read(&devices_rwsem);
+	/* Make sure that the device is registered before we send events */
+	if (xa_load(&devices, ib_dev->index) != ib_dev)
+		return 0;
+
+	etype = ndev ? RDMA_NETDEV_ATTACH_EVENT : RDMA_NETDEV_DETACH_EVENT;
+	rdma_nl_notify_event(ib_dev, port, etype);
 
 	return 0;
 }

  parent reply	other threads:[~2024-09-10 11:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-09 17:30 [PATCH rdma-next v3 0/7] Support RDMA events monitoring through Michael Guralnik
2024-09-09 17:30 ` [PATCH v3 rdma-next 1/7] RDMA/mlx5: Check RoCE LAG status before getting netdev Michael Guralnik
2024-09-10  3:58   ` Kalesh Anakkur Purayil
2024-09-09 17:30 ` [PATCH v3 rdma-next 2/7] RDMA/mlx5: Obtain upper net device only when needed Michael Guralnik
2024-09-10  3:59   ` Kalesh Anakkur Purayil
2024-09-09 17:30 ` [PATCH v3 rdma-next 3/7] RDMA/mlx5: Initialize phys_port_cnt earlier in RDMA device creation Michael Guralnik
2024-09-09 17:30 ` [PATCH v3 rdma-next 4/7] RDMA/device: Remove optimization in ib_device_get_netdev() Michael Guralnik
2024-09-10  4:00   ` Kalesh Anakkur Purayil
2024-09-09 17:30 ` [PATCH v3 rdma-next 5/7] RDMA/mlx5: Use IB set_netdev and get_netdev functions Michael Guralnik
2024-09-09 17:30 ` [PATCH v3 rdma-next 6/7] RDMA/nldev: Add support for RDMA monitoring Michael Guralnik
2024-09-09 18:05   ` Leon Romanovsky
2024-09-10 11:09   ` Leon Romanovsky [this message]
2024-09-09 17:30 ` [PATCH v3 rdma-next 7/7] RDMA/nldev: Expose whether RDMA monitoring is supported Michael Guralnik
2024-09-11 13:30 ` [PATCH rdma-next v3 0/7] Support RDMA events monitoring through 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=20240910110914.GX4026@unreal \
    --to=leonro@nvidia.com \
    --cc=cmeiohas@nvidia.com \
    --cc=dsahern@gmail.com \
    --cc=jgg@nvidia.com \
    --cc=linux-rdma@vger.kernel.org \
    --cc=mbloch@nvidia.com \
    --cc=michaelgur@nvidia.com \
    --cc=msanalla@nvidia.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.