Add thread barriers on non-mp-safe calls

This commit is contained in:
Pim van Pelt
2021-08-24 01:13:16 +02:00
parent d63fbd8a9a
commit c02656de22

View File

@ -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)
{ {