vlib: acquire barrier before exit call 67/30967/3
authorKommula Shiva Shankar <kshankar@marvell.com>
Thu, 28 Jan 2021 07:35:59 +0000 (13:05 +0530)
committerDave Barach <openvpp@barachs.net>
Fri, 29 Jan 2021 12:51:10 +0000 (12:51 +0000)
Type: fix

A plugin exit callback function registered via
VLIB_MAIN_LOOP_EXIT_FUNCTION() is called without stopping worker cores
doing data path processing. Following error is observed while exiting
vpp.

error log:
vppctl# q
0: /vpp_master/src/vnet/interface.c:1058 (vnet_delete_hw_interface) assertion `ii == 0 || this_vlib_main->parked_at_barrier == 1' fails

This patch calls all exit() functions after acquiring barrier

Signed-off-by: Kommula Shiva Shankar <kshankar@marvell.com>
Reviewed-by: Nitin Saxena <nsaxena@marvell.com>
Change-Id: I2fd565f0afaa62cb0fb0389922f49e4d382f028c

src/vlib/main.c

index c76d874..77c6979 100644 (file)
@@ -2246,6 +2246,7 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
   vlib_main_loop (vm);
 
 done:
+  vlib_worker_thread_barrier_sync (vm);
   /* Call all exit functions. */
   {
     clib_error_t *sub_error;
@@ -2253,6 +2254,7 @@ done:
     if (sub_error)
       clib_error_report (sub_error);
   }
+  vlib_worker_thread_barrier_release (vm);
 
   if (error)
     clib_error_report (error);