* [PATCH net-next 2/2] net: Drop NETDEV_UNREGISTER_FINAL
[not found] <152179793764.13076.13815355125332565598.stgit@localhost.localdomain>
@ 2018-03-23 9:39 ` Kirill Tkhai
2018-03-23 16:15 ` Jason Gunthorpe
0 siblings, 1 reply; 2+ messages in thread
From: Kirill Tkhai @ 2018-03-23 9:39 UTC (permalink / raw)
To: davem, Michal.Kalderon, Ariel.Elior, dledford, jgg, benve,
1dgoodell, daniel, jakub.kicinski, ast, edumazet, linux,
john.fastabend, brouer, dsahern, netdev, ktkhai
Last user is gone after bdf5bd7f2132 "rds: tcp: remove
register_netdevice_notifier infrastructure.", so we can
remove this netdevice command. This allows to delete
rtnl_lock() in netdev_run_todo(), which is hot path for
net namespace unregistration.
dev_change_net_namespace() and netdev_wait_allrefs()
have rcu_barrier() before NETDEV_UNREGISTER_FINAL call,
and the source commits say they were introduced to
delemit the call with NETDEV_UNREGISTER, but this patch
leaves them on the places, since they require additional
analysis, whether we need in them for something else.
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
---
drivers/infiniband/hw/qedr/main.c | 4 ++--
include/linux/netdevice.h | 1 -
include/rdma/ib_verbs.h | 4 ++--
net/core/dev.c | 6 ------
4 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
index db4bf97c0e15..eb32abb0099a 100644
--- a/drivers/infiniband/hw/qedr/main.c
+++ b/drivers/infiniband/hw/qedr/main.c
@@ -90,8 +90,8 @@ static struct net_device *qedr_get_netdev(struct ib_device *dev, u8 port_num)
dev_hold(qdev->ndev);
/* The HW vendor's device driver must guarantee
- * that this function returns NULL before the net device reaches
- * NETDEV_UNREGISTER_FINAL state.
+ * that this function returns NULL before the net device has finished
+ * NETDEV_UNREGISTER state.
*/
return qdev->ndev;
}
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index dd5a04c971d5..2a2d9cf50aa2 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2336,7 +2336,6 @@ enum netdev_cmd {
NETDEV_PRE_TYPE_CHANGE,
NETDEV_POST_TYPE_CHANGE,
NETDEV_POST_INIT,
- NETDEV_UNREGISTER_FINAL,
NETDEV_RELEASE,
NETDEV_NOTIFY_PEERS,
NETDEV_JOIN,
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 73b2387e3f74..a1c5e8320f86 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -2126,8 +2126,8 @@ struct ib_device {
* net device of device @device at port @port_num or NULL if such
* a net device doesn't exist. The vendor driver should call dev_hold
* on this net device. The HW vendor's device driver must guarantee
- * that this function returns NULL before the net device reaches
- * NETDEV_UNREGISTER_FINAL state.
+ * that this function returns NULL before the net device has finished
+ * NETDEV_UNREGISTER state.
*/
struct net_device *(*get_netdev)(struct ib_device *device,
u8 port_num);
diff --git a/net/core/dev.c b/net/core/dev.c
index bcc9fe68240b..c444da3e4b82 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -8086,7 +8086,6 @@ static void netdev_wait_allrefs(struct net_device *dev)
rcu_barrier();
rtnl_lock();
- call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
if (test_bit(__LINK_STATE_LINKWATCH_PENDING,
&dev->state)) {
/* We must not have linkwatch events
@@ -8158,10 +8157,6 @@ void netdev_run_todo(void)
= list_first_entry(&list, struct net_device, todo_list);
list_del(&dev->todo_list);
- rtnl_lock();
- call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
- __rtnl_unlock();
-
if (unlikely(dev->reg_state != NETREG_UNREGISTERING)) {
pr_err("network todo '%s' but state %d\n",
dev->name, dev->reg_state);
@@ -8603,7 +8598,6 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
*/
call_netdevice_notifiers(NETDEV_UNREGISTER, dev);
rcu_barrier();
- call_netdevice_notifiers(NETDEV_UNREGISTER_FINAL, dev);
new_nsid = peernet2id_alloc(dev_net(dev), net);
/* If there is an ifindex conflict assign a new one */
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net-next 2/2] net: Drop NETDEV_UNREGISTER_FINAL
2018-03-23 9:39 ` [PATCH net-next 2/2] net: Drop NETDEV_UNREGISTER_FINAL Kirill Tkhai
@ 2018-03-23 16:15 ` Jason Gunthorpe
0 siblings, 0 replies; 2+ messages in thread
From: Jason Gunthorpe @ 2018-03-23 16:15 UTC (permalink / raw)
To: Kirill Tkhai
Cc: davem, Michal.Kalderon, Ariel.Elior, dledford, benve, 1dgoodell,
daniel, jakub.kicinski, ast, edumazet, linux, john.fastabend,
brouer, dsahern, netdev
On Fri, Mar 23, 2018 at 12:39:33PM +0300, Kirill Tkhai wrote:
> Last user is gone after bdf5bd7f2132 "rds: tcp: remove
> register_netdevice_notifier infrastructure.", so we can
> remove this netdevice command. This allows to delete
> rtnl_lock() in netdev_run_todo(), which is hot path for
> net namespace unregistration.
>
> dev_change_net_namespace() and netdev_wait_allrefs()
> have rcu_barrier() before NETDEV_UNREGISTER_FINAL call,
> and the source commits say they were introduced to
> delemit the call with NETDEV_UNREGISTER, but this patch
> leaves them on the places, since they require additional
> analysis, whether we need in them for something else.
>
> Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
> drivers/infiniband/hw/qedr/main.c | 4 ++--
> include/linux/netdevice.h | 1 -
> include/rdma/ib_verbs.h | 4 ++--
> net/core/dev.c | 6 ------
> 4 files changed, 4 insertions(+), 11 deletions(-)
No problem to take the rdma part of this through netdev
Acked-by: Jason Gunthorpe <jgg@mellanox.com>
Jason
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-03-23 16:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <152179793764.13076.13815355125332565598.stgit@localhost.localdomain>
2018-03-23 9:39 ` [PATCH net-next 2/2] net: Drop NETDEV_UNREGISTER_FINAL Kirill Tkhai
2018-03-23 16:15 ` Jason Gunthorpe
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.