acl: fix prefetch out of struct bound on Arm 97/33597/1
authorTianyu Li <tianyu.li@arm.com>
Thu, 26 Aug 2021 01:43:42 +0000 (09:43 +0800)
committerTianyu Li <tianyu.li@arm.com>
Thu, 26 Aug 2021 02:28:17 +0000 (10:28 +0800)
commitc6b6816bed8a4fa2baa396bc0af56e4ac373d713
treeffeba68e517c6b803ff0faf650c5f243c51a7edb
parentee04de552d1749948e8802c2c6a87646f3b81625
acl: fix prefetch out of struct bound on Arm

  fa_session_t *sess;
  CLIB_PREFETCH (sess, 2 * CLIB_CACHE_LINE_BYTES, STORE);

sizeof(fa_session_t) is 128 bytes

i) on 64B cacheline size Arm machine,
above CLIB_PREFETCH () macro will be expand to
__builtin_prefetch(sess)
__builtin_prefetch(sess + 64)
__builtin_prefetch(sess + 128) <<  prefetch is out of range of *sess.
__builtin_prefetch(sess + 192) <<

ii) on 128B cacheline size Arm machine, CLIB_PREFETCH () expands to
__builtin_prefetch(sess)
__builtin_prefetch(sess + 128) << still out of bound

Solution:
Change to CLIB_PREFETCH (sess, sizeof(*sess), STORE);

Type: fix
Signed-off-by: Tianyu Li <tianyu.li@arm.com>
Reviewed-by: Lijian Zhang <lijian.zhang@arm.com>
Change-Id: I4b3d4fc55747f3d9ad1bcf24f8834601a03ef55e
src/plugins/acl/dataplane_node.c