dpdk: fix prefetch assert on Arm 98/33598/5
authorTianyu Li <tianyu.li@arm.com>
Thu, 26 Aug 2021 01:47:31 +0000 (09:47 +0800)
committerDamjan Marion <dmarion@me.com>
Mon, 13 Sep 2021 13:38:36 +0000 (13:38 +0000)
  CLIB_PREFETCH (cop[1], CLIB_CACHE_LINE_BYTES * 3, STORE);

Note on 64 bytes cache line size arm machines,
CLIB_CACHE_LINE_BYTES 128
CLIB_CACHE_PREFETCH_BYTES 6

above CLIB_PREFETCH () macro will be expand to
ASSERT ((size) <= 4 * CLIB_CACHE_PREFETCH_BYTES);
it will hit assert due to size (i.e. 3 * 128) > 4 * 64

Solution:
Change to CLIB_PREFETCH (cop[1], sizeof(*cop[1]), STORE);

Type: fix
Signed-off-by: Tianyu Li <tianyu.li@arm.com>
Reviewed-by: Lijian Zhang <lijian.zhang@arm.com>
Change-Id: Id0981fd5bd2b25ff71db4197b25578d0b7a9803e

src/plugins/dpdk/cryptodev/cryptodev_op_data_path.c

index 4545e24..771d804 100644 (file)
@@ -169,8 +169,8 @@ cryptodev_frame_linked_algs_enqueue (vlib_main_t *vm,
 
       if (n_elts > 2)
        {
-         CLIB_PREFETCH (cop[1], CLIB_CACHE_LINE_BYTES * 3, STORE);
-         CLIB_PREFETCH (cop[2], CLIB_CACHE_LINE_BYTES * 3, STORE);
+         CLIB_PREFETCH (cop[1], sizeof (*cop[1]), STORE);
+         CLIB_PREFETCH (cop[2], sizeof (*cop[2]), STORE);
          clib_prefetch_load (&fe[1]);
          clib_prefetch_load (&fe[2]);
        }
@@ -286,8 +286,8 @@ cryptodev_frame_aead_enqueue (vlib_main_t *vm,
 
       if (n_elts > 2)
        {
-         CLIB_PREFETCH (cop[1], CLIB_CACHE_LINE_BYTES * 3, STORE);
-         CLIB_PREFETCH (cop[2], CLIB_CACHE_LINE_BYTES * 3, STORE);
+         CLIB_PREFETCH (cop[1], sizeof (*cop[1]), STORE);
+         CLIB_PREFETCH (cop[2], sizeof (*cop[2]), STORE);
          clib_prefetch_load (&fe[1]);
          clib_prefetch_load (&fe[2]);
        }