From: Zhu Yanjun <yanjun.zhu@intel.com>
To: jgg@ziepe.ca, leon@kernel.org, linux-rdma@vger.kernel.org,
yanjun.zhu@linux.dev, yanjun.zhu@intel.com
Subject: [PATCH 1/3] RDMA/core: Move ib device to the same net namespace with net device
Date: Sun, 23 Oct 2022 18:04:48 -0400 [thread overview]
Message-ID: <20221023220450.2287909-2-yanjun.zhu@intel.com> (raw)
In-Reply-To: <20221023220450.2287909-1-yanjun.zhu@intel.com>
From: Zhu Yanjun <yanjun.zhu@linux.dev>
When a net device is moved from a net namespace to another net namespace,
the related ib device should also be moved to the same net namespace.
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/core/device.c | 57 ++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index d275db195f1a..59784fd10876 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -2735,6 +2735,54 @@ int ib_dma_virt_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents)
EXPORT_SYMBOL(ib_dma_virt_map_sg);
#endif /* CONFIG_INFINIBAND_VIRT_DMA */
+static int rdma_netns_notify(struct notifier_block *not_blk,
+ unsigned long event, void *arg)
+{
+ struct net_device *ndev = netdev_notifier_info_to_dev(arg);
+ struct ib_device *ibdev = ib_device_get_by_netdev(ndev, RDMA_DRIVER_UNKNOWN);
+
+ if (!ibdev)
+ return NOTIFY_OK;
+
+ switch (event) {
+ case NETDEV_REGISTER:
+ ib_device_put(ibdev);
+ if (!net_eq(read_pnet(&ibdev->coredev.rdma_net), dev_net(ndev))) {
+ int ret = 0;
+
+ get_device(&ibdev->dev);
+ ret = rdma_dev_change_netns(ibdev,
+ read_pnet(&ibdev->coredev.rdma_net),
+ dev_net(ndev));
+ if (ret) {
+ put_device(&ibdev->dev);
+ return NOTIFY_OK;
+ }
+ put_device(&ibdev->dev);
+ }
+ break;
+ case NETDEV_UNREGISTER:
+ ib_device_put(ibdev);
+ break;
+ case NETDEV_REBOOT:
+ case NETDEV_GOING_DOWN:
+ case NETDEV_CHANGEADDR:
+ case NETDEV_CHANGENAME:
+ case NETDEV_FEAT_CHANGE:
+ default:
+ ib_device_put(ibdev);
+ pr_info("ignoring netdev event = %ld for %s\n",
+ event, ndev->name);
+ break;
+ }
+
+ return NOTIFY_OK;
+}
+
+static struct notifier_block rdma_netns_notifier = {
+ .notifier_call = rdma_netns_notify,
+};
+
static const struct rdma_nl_cbs ibnl_ls_cb_table[RDMA_NL_LS_NUM_OPS] = {
[RDMA_NL_LS_OP_RESOLVE] = {
.doit = ib_nl_handle_resolve_resp,
@@ -2817,8 +2865,16 @@ static int __init ib_core_init(void)
rdma_nl_register(RDMA_NL_LS, ibnl_ls_cb_table);
roce_gid_mgmt_init();
+ ret = register_netdevice_notifier(&rdma_netns_notifier);
+ if (ret) {
+ pr_err("Failed to register netdev notifier\n");
+ goto err_netdevice;
+ }
+
return 0;
+err_netdevice:
+ unregister_pernet_device(&rdma_dev_net_ops);
err_compat:
unregister_blocking_lsm_notifier(&ibdev_lsm_nb);
err_sa:
@@ -2842,6 +2898,7 @@ static int __init ib_core_init(void)
static void __exit ib_core_cleanup(void)
{
+ unregister_netdevice_notifier(&rdma_netns_notifier);
roce_gid_mgmt_cleanup();
nldev_exit();
rdma_nl_unregister(RDMA_NL_LS);
--
2.27.0
next prev parent reply other threads:[~2022-10-23 5:39 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-23 22:04 [PATCH 0/3] RDMA net namespace Zhu Yanjun
2022-10-23 13:04 ` Leon Romanovsky
2022-10-23 13:42 ` Yanjun Zhu
2022-10-23 16:45 ` Leon Romanovsky
2022-10-24 7:20 ` yanjun.zhu
2022-10-23 22:04 ` Zhu Yanjun [this message]
2022-10-23 22:04 ` [PATCH 2/3] RDMA/core: The legacy IB devices still work with shared/exclusive mode Zhu Yanjun
2022-10-23 22:04 ` [PATCH 3/3] RDMA/core: Get all the ib devices from net devices Zhu Yanjun
2022-10-24 1:10 ` [PATCH 0/3] RDMA net namespace Dust Li
2022-10-24 6:15 ` yanjun.zhu
2022-10-24 11:52 ` Dust Li
2022-10-24 13:12 ` Yanjun Zhu
2022-10-24 14:35 ` Dust Li
2022-10-24 16:41 ` Jason Gunthorpe
2022-10-25 2:51 ` Yanjun Zhu
2022-10-26 4:08 ` Dust Li
2022-10-26 15:01 ` Dust Li
2022-10-27 2:30 ` Dust Li
2022-10-27 2:54 ` yanjun.zhu
2022-10-27 3:01 ` Parav Pandit
2022-10-27 3:07 ` yanjun.zhu
2022-10-27 3:10 ` Parav Pandit
2022-10-27 3:17 ` yanjun.zhu
2022-10-27 3:21 ` Parav Pandit
2022-10-27 3:39 ` yanjun.zhu
2022-10-27 3:48 ` Parav Pandit
2022-10-27 6:01 ` yanjun.zhu
2022-10-27 14:06 ` Parav Pandit
2022-10-28 3:21 ` Yanjun Zhu
2022-10-28 3:31 ` Parav Pandit
2022-10-28 3:49 ` Yanjun Zhu
2022-10-28 3:58 ` Parav Pandit
2022-11-11 2:38 ` Yanjun Zhu
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=20221023220450.2287909-2-yanjun.zhu@intel.com \
--to=yanjun.zhu@intel.com \
--cc=jgg@ziepe.ca \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=yanjun.zhu@linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox