dpdk-cryptodev: run dequeue again in case of interrupt mode being used 80/34780/4
authorDastin Wilski <dastinx.wilski@intel.com>
Tue, 21 Dec 2021 08:51:52 +0000 (08:51 +0000)
committerDamjan Marion <dmarion@me.com>
Wed, 12 Jan 2022 09:45:00 +0000 (09:45 +0000)
Type: fix

Change-Id: I7aa172e58c970c4971db6ef2ff5b199b7f3c0b99
Signed-off-by: Dastin Wilski <dastin.wilski@gmail.com>
src/plugins/dpdk/cryptodev/cryptodev_raw_data_path.c

index a93184a..6793b9a 100644 (file)
@@ -422,6 +422,7 @@ cryptodev_raw_dequeue (vlib_main_t *vm, u32 *nb_elts_processed,
                       u32 *enqueue_thread_idx)
 {
   cryptodev_main_t *cmt = &cryptodev_main;
+  vnet_crypto_main_t *cm = &crypto_main;
   cryptodev_engine_thread_t *cet = cmt->per_thread_data + vm->thread_index;
   vnet_crypto_async_frame_t *frame, *frame_ret = 0;
   u32 n_deq, n_success;
@@ -510,6 +511,11 @@ cryptodev_raw_dequeue (vlib_main_t *vm, u32 *nb_elts_processed,
        }
     }
 
+  if (cm->dispatch_mode == VNET_CRYPTO_ASYNC_DISPATCH_INTERRUPT &&
+      inflight > 0)
+    vlib_node_set_interrupt_pending (vlib_get_main_by_index (vm->thread_index),
+                                    cm->crypto_node_index);
+
   /* no point to dequeue further */
   if (!inflight || no_job_to_deq || !n_room_left)
     goto end_deq;