avf: add assert to ensure that adminq is used only from avf process 51/28851/3
authorDamjan Marion <damarion@cisco.com>
Fri, 11 Sep 2020 12:11:11 +0000 (14:11 +0200)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 16 Sep 2020 11:14:42 +0000 (11:14 +0000)
Type: improvement
Change-Id: Ib64c9b8207776986656e5a26c13a221edc6cc950
Signed-off-by: Damjan Marion <damarion@cisco.com>
(cherry picked from commit 698eeb126d01427313949241b961c27347db8c72)

src/plugins/avf/device.c
src/vlib/node_funcs.h

index 62a18cc..8a7d74a 100644 (file)
@@ -399,6 +399,11 @@ avf_send_to_pf (vlib_main_t * vm, avf_device_t * ad, virtchnl_ops_t op,
   u32 head;
   f64 t0, suspend_time = AVF_SEND_TO_PF_SUSPEND_TIME;
 
+  /* adminq operations should be only done from process node after device
+   * is initialized */
+  ASSERT ((ad->flags & AVF_DEVICE_F_INITIALIZED) == 0 ||
+         vlib_get_current_process_node_index (vm) == avf_process_node.index);
+
   /* suppress interrupt in the next adminq receive slot
      as we are going to wait for response
      we only need interrupts when event is received */
index dfeba17..33bdc79 100644 (file)
@@ -455,6 +455,13 @@ vlib_current_process (vlib_main_t * vm)
   return vlib_get_current_process (vm)->node_runtime.node_index;
 }
 
+always_inline u32
+vlib_get_current_process_node_index (vlib_main_t * vm)
+{
+  vlib_process_t *process = vlib_get_current_process (vm);
+  return process->node_runtime.node_index;
+}
+
 /** Returns TRUE if a process suspend time is less than 10us
     @param dt - remaining poll time in seconds
     @returns 1 if dt < 10e-6, 0 otherwise