mlx5: implement VLAN tag XDP hint
authorLarysa Zaremba <larysa.zaremba@intel.com>
Tue, 5 Dec 2023 21:08:43 +0000 (22:08 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 14 Dec 2023 00:16:41 +0000 (16:16 -0800)
Implement the newly added .xmo_rx_vlan_tag() hint function.

Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
Link: https://lore.kernel.org/r/20231205210847.28460-15-larysa.zaremba@intel.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
include/linux/mlx5/device.h

index e2e7d82cfca4f410b46d19a54e211992f53a5331..9e695ed122ee21c883587b78e9c3d947fc9ab212 100644 (file)
@@ -256,9 +256,24 @@ static int mlx5e_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash,
        return 0;
 }
 
+static int mlx5e_xdp_rx_vlan_tag(const struct xdp_md *ctx, __be16 *vlan_proto,
+                                u16 *vlan_tci)
+{
+       const struct mlx5e_xdp_buff *_ctx = (void *)ctx;
+       const struct mlx5_cqe64 *cqe = _ctx->cqe;
+
+       if (!cqe_has_vlan(cqe))
+               return -ENODATA;
+
+       *vlan_proto = htons(ETH_P_8021Q);
+       *vlan_tci = be16_to_cpu(cqe->vlan_info);
+       return 0;
+}
+
 const struct xdp_metadata_ops mlx5e_xdp_metadata_ops = {
        .xmo_rx_timestamp               = mlx5e_xdp_rx_timestamp,
        .xmo_rx_hash                    = mlx5e_xdp_rx_hash,
+       .xmo_rx_vlan_tag                = mlx5e_xdp_rx_vlan_tag,
 };
 
 struct mlx5e_xsk_tx_complete {
index 820bca965fb6f2ffebfddb067f6f05eb3c6c2a55..01275c6e84688fc84aee7c0eef0d6a00070ab134 100644 (file)
@@ -918,7 +918,7 @@ static inline u8 get_cqe_tls_offload(struct mlx5_cqe64 *cqe)
        return (cqe->tls_outer_l3_tunneled >> 3) & 0x3;
 }
 
-static inline bool cqe_has_vlan(struct mlx5_cqe64 *cqe)
+static inline bool cqe_has_vlan(const struct mlx5_cqe64 *cqe)
 {
        return cqe->l4_l3_hdr_type & 0x1;
 }