[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <174265446129.356712.10468249471563047526.stgit@pro.pro>
Date: Sat, 22 Mar 2025 17:41:01 +0300
From: Kirill Tkhai <tkhai@...ru>
To: netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Cc: tkhai@...ru
Subject: [PATCH NET-PREV 25/51] wwan: Use __register_netdevice in .newlink
The objective is to conform .newlink with its callers,
which already assign nd_lock (and matches master nd_lock
if there is one).
Signed-off-by: Kirill Tkhai <tkhai@...ru>
---
drivers/net/wwan/iosm/iosm_ipc_wwan.c | 2 +-
drivers/net/wwan/mhi_wwan_mbim.c | 2 +-
drivers/net/wwan/t7xx/t7xx_netdev.c | 2 +-
drivers/net/wwan/wwan_core.c | 13 +++++++++++--
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
index ff747fc79aaf..f84f59df0747 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c
@@ -180,7 +180,7 @@ static int ipc_wwan_newlink(void *ctxt, struct net_device *dev,
if (rcu_access_pointer(ipc_wwan->sub_netlist[if_id]))
return -EBUSY;
- err = register_netdevice(dev);
+ err = __register_netdevice(dev);
if (err)
return err;
diff --git a/drivers/net/wwan/mhi_wwan_mbim.c b/drivers/net/wwan/mhi_wwan_mbim.c
index d5a9360323d2..369ed68211dd 100644
--- a/drivers/net/wwan/mhi_wwan_mbim.c
+++ b/drivers/net/wwan/mhi_wwan_mbim.c
@@ -566,7 +566,7 @@ static int mhi_mbim_newlink(void *ctxt, struct net_device *ndev, u32 if_id,
/* Already protected by RTNL lock */
hlist_add_head_rcu(&link->hlnode, &mbim->link_list[LINK_HASH(if_id)]);
- return register_netdevice(ndev);
+ return __register_netdevice(ndev);
}
static void mhi_mbim_dellink(void *ctxt, struct net_device *ndev,
diff --git a/drivers/net/wwan/t7xx/t7xx_netdev.c b/drivers/net/wwan/t7xx/t7xx_netdev.c
index 91fa082e9cab..3bde38147930 100644
--- a/drivers/net/wwan/t7xx/t7xx_netdev.c
+++ b/drivers/net/wwan/t7xx/t7xx_netdev.c
@@ -304,7 +304,7 @@ static int t7xx_ccmni_wwan_newlink(void *ctxt, struct net_device *dev, u32 if_id
atomic_set(&ccmni->usage, 0);
ctlb->ccmni_inst[if_id] = ccmni;
- ret = register_netdevice(dev);
+ ret = __register_netdevice(dev);
if (ret)
return ret;
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index 17431f1b1a0c..c2878efcde59 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -982,7 +982,7 @@ static int wwan_rtnl_newlink(struct net *src_net, struct net_device *dev,
ret = wwandev->ops->newlink(wwandev->ops_ctxt, dev,
link_id, extack);
else
- ret = register_netdevice(dev);
+ ret = __register_netdevice(dev);
out:
/* release the reference */
@@ -1053,9 +1053,11 @@ static void wwan_create_default_link(struct wwan_device *wwandev,
{
struct nlattr *tb[IFLA_MAX + 1], *linkinfo[IFLA_INFO_MAX + 1];
struct nlattr *data[IFLA_WWAN_MAX + 1];
+ struct nd_lock *nd_lock;
struct net_device *dev;
struct nlmsghdr *nlh;
struct sk_buff *msg;
+ int ret;
/* Forge attributes required to create a WWAN netdev. We first
* build a netlink message and then parse it. This looks
@@ -1097,7 +1099,14 @@ static void wwan_create_default_link(struct wwan_device *wwandev,
if (WARN_ON(IS_ERR(dev)))
goto unlock;
- if (WARN_ON(wwan_rtnl_newlink(&init_net, dev, tb, data, NULL))) {
+ if (!attach_new_nd_lock(dev))
+ goto unlock;
+
+ lock_netdev(dev, &nd_lock);
+ ret = wwan_rtnl_newlink(&init_net, dev, tb, data, NULL);
+ unlock_netdev(nd_lock);
+
+ if (WARN_ON(ret)) {
free_netdev(dev);
goto unlock;
}
Powered by blists - more mailing lists