Add thread barriers on non-mp-safe calls
This commit is contained in:
@ -158,6 +158,7 @@ lcp_nl_addr_add_del (struct rtnl_addr *ra, int is_del)
|
|||||||
|
|
||||||
lcp_nl_mk_ip_addr (rtnl_addr_get_local (ra), &nh);
|
lcp_nl_mk_ip_addr (rtnl_addr_get_local (ra), &nh);
|
||||||
|
|
||||||
|
vlib_worker_thread_barrier_sync (vlib_get_main ());
|
||||||
if (AF_IP4 == ip_addr_version (&nh))
|
if (AF_IP4 == ip_addr_version (&nh))
|
||||||
{
|
{
|
||||||
ip4_add_del_interface_address (
|
ip4_add_del_interface_address (
|
||||||
@ -182,6 +183,7 @@ lcp_nl_addr_add_del (struct rtnl_addr *ra, int is_del)
|
|||||||
rtnl_addr_get_prefixlen (ra), is_del);
|
rtnl_addr_get_prefixlen (ra), is_del);
|
||||||
lcp_nl_ip6_mroutes_add_del (lip->lip_phy_sw_if_index, !is_del);
|
lcp_nl_ip6_mroutes_add_del (lip->lip_phy_sw_if_index, !is_del);
|
||||||
}
|
}
|
||||||
|
vlib_worker_thread_barrier_release (vlib_get_main ());
|
||||||
|
|
||||||
NL_NOTICE ("addr_%s %U/%d iface %U", is_del ? "del: Deleted" : "add: Added",
|
NL_NOTICE ("addr_%s %U/%d iface %U", is_del ? "del: Deleted" : "add: Added",
|
||||||
format_ip_address, &nh, rtnl_addr_get_prefixlen (ra),
|
format_ip_address, &nh, rtnl_addr_get_prefixlen (ra),
|
||||||
@ -235,7 +237,9 @@ lcp_nl_neigh_add (struct rtnl_neigh *rn)
|
|||||||
else
|
else
|
||||||
flags = IP_NEIGHBOR_FLAG_DYNAMIC;
|
flags = IP_NEIGHBOR_FLAG_DYNAMIC;
|
||||||
|
|
||||||
|
vlib_worker_thread_barrier_sync (vlib_get_main ());
|
||||||
rv = ip_neighbor_add (&nh, &mac, lip->lip_phy_sw_if_index, flags, NULL);
|
rv = ip_neighbor_add (&nh, &mac, lip->lip_phy_sw_if_index, flags, NULL);
|
||||||
|
vlib_worker_thread_barrier_release (vlib_get_main ());
|
||||||
|
|
||||||
if (rv)
|
if (rv)
|
||||||
{
|
{
|
||||||
@ -270,7 +274,9 @@ lcp_nl_neigh_del (struct rtnl_neigh *rn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
lcp_nl_mk_ip_addr (rtnl_neigh_get_dst (rn), &nh);
|
lcp_nl_mk_ip_addr (rtnl_neigh_get_dst (rn), &nh);
|
||||||
|
vlib_worker_thread_barrier_sync (vlib_get_main ());
|
||||||
rv = ip_neighbor_del (&nh, lip->lip_phy_sw_if_index);
|
rv = ip_neighbor_del (&nh, lip->lip_phy_sw_if_index);
|
||||||
|
vlib_worker_thread_barrier_release (vlib_get_main ());
|
||||||
|
|
||||||
if (rv == 0 || rv == VNET_API_ERROR_NO_SUCH_ENTRY)
|
if (rv == 0 || rv == VNET_API_ERROR_NO_SUCH_ENTRY)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user