mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-10 07:44:23 +08:00
mlxsw: spectrum_router: Introduce router lock
Introduce a mutex to protect the internal structure of the routing code. A single lock is added instead of a more fine-grained and complicated locking scheme because there is not a lot of concurrency in the routing code. The main motivation is remove the dependence on RTNL lock, which is currently used by both the process pushing routes to the kernel and the workqueue pushing the routes to the underlying device. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8e18d85eab
commit
20bf5d82bb
@ -17,6 +17,7 @@
|
||||
#include <linux/refcount.h>
|
||||
#include <linux/jhash.h>
|
||||
#include <linux/net_namespace.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <net/netevent.h>
|
||||
#include <net/neighbour.h>
|
||||
#include <net/arp.h>
|
||||
@ -8065,6 +8066,7 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
|
||||
router = kzalloc(sizeof(*mlxsw_sp->router), GFP_KERNEL);
|
||||
if (!router)
|
||||
return -ENOMEM;
|
||||
mutex_init(&router->lock);
|
||||
mlxsw_sp->router = router;
|
||||
router->mlxsw_sp = mlxsw_sp;
|
||||
|
||||
@ -8168,6 +8170,7 @@ err_router_init:
|
||||
err_register_inet6addr_notifier:
|
||||
unregister_inetaddr_notifier(&router->inetaddr_nb);
|
||||
err_register_inetaddr_notifier:
|
||||
mutex_destroy(&mlxsw_sp->router->lock);
|
||||
kfree(mlxsw_sp->router);
|
||||
return err;
|
||||
}
|
||||
@ -8188,5 +8191,6 @@ void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
|
||||
__mlxsw_sp_router_fini(mlxsw_sp);
|
||||
unregister_inet6addr_notifier(&mlxsw_sp->router->inet6addr_nb);
|
||||
unregister_inetaddr_notifier(&mlxsw_sp->router->inetaddr_nb);
|
||||
mutex_destroy(&mlxsw_sp->router->lock);
|
||||
kfree(mlxsw_sp->router);
|
||||
}
|
||||
|
@ -47,6 +47,7 @@ struct mlxsw_sp_router {
|
||||
u32 adj_discard_index;
|
||||
bool adj_discard_index_valid;
|
||||
struct mlxsw_sp_router_nve_decap nve_decap_config;
|
||||
struct mutex lock; /* Protects shared router resources */
|
||||
};
|
||||
|
||||
struct mlxsw_sp_rif_ipip_lb;
|
||||
|
Loading…
Reference in New Issue
Block a user