From: Steven Date: Tue, 27 Feb 2018 22:43:40 +0000 (-0800) Subject: vnet/interface: vnet_(put|get)frame_to_sw_interface is not worker thread aware X-Git-Tag: v18.04-rc1~241 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F51%2F10851%2F2;p=vpp.git vnet/interface: vnet_(put|get)frame_to_sw_interface is not worker thread aware When heavy traffic is running using worker threads, it may crash here DBGvpp# 0: /home/sluong/vpp3/vpp/build-data/../src/vlib/main.c:1128 (dispatch_pending_node) assertion `f->flags & VLIB_FRAME_PENDING' fails Thread 1 "vpp_main" received signal SIGABRT, Aborted. 0x00007ffff5d50428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) No crash was observed if only main thread was used. Change-Id: I96f8b02ec23accc85c0f1ddecfeff6043b5e3c2b Signed-off-by: Steven --- diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index 5aecaff9b27..9c96027b705 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -245,7 +245,7 @@ always_inline vlib_frame_t * vnet_get_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index) { vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); - return vlib_get_frame_to_node (vnm->vlib_main, hw->output_node_index); + return vlib_get_frame_to_node (vlib_get_main (), hw->output_node_index); } always_inline void @@ -253,7 +253,7 @@ vnet_put_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index, vlib_frame_t * f) { vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); - return vlib_put_frame_to_node (vnm->vlib_main, hw->output_node_index, f); + return vlib_put_frame_to_node (vlib_get_main (), hw->output_node_index, f); } /* Change interface flags (e.g. up, down, enable, disable). */