net/mlx5: fix meta register conversion for extensive mode
authorAlexander Kozyrev <akozyrev@nvidia.com>
Tue, 20 Jul 2021 07:51:38 +0000 (10:51 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 22 Jul 2021 14:24:56 +0000 (16:24 +0200)
commit6d5735c1cba2e3b7e9eca781fbd79213e176a6c6
tree6e1f0e74b3fdfd89f3e7f969aa87f0edf5d77adc
parent89a4bcb1fc7cacc76349013217d496711241e0f3
net/mlx5: fix meta register conversion for extensive mode

Register C is used in the extensive metadata mode number 1 and its
width can vary from 0 to 32 bits depending on the kernel usage of it.

There are several issues associated with this mode (dv_xmeta_en=1):
1. The metadata setting assumes that the width is always 16 bits,
which is the most common case in this mode. Use the proper mask.
2. The same is true for the modify_field Flow API. 16-bits width
is hardcoded for dv_xmeta_en=1. Switch to the register C mask width.
3. Metadata is stored in the most significant bits in CQE in this
mode because the registers copy code was not updated during the
metadata conversion to the big-endian format. Update this code to
avoid shifting the metadata in the datapath.

Fixes: b57e414b48 ("net/mlx5: convert meta register to big-endian")
Cc: stable@dpdk.org
Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
drivers/net/mlx5/mlx5_flow.c
drivers/net/mlx5/mlx5_flow_dv.c
drivers/net/mlx5/mlx5_rx.c
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
drivers/net/mlx5/mlx5_rxtx_vec_neon.h
drivers/net/mlx5/mlx5_rxtx_vec_sse.h