]> git.hungrycats.org Git - linux/commitdiff
vdpa/mlx5: Fix rule forwarding VLAN to TIR
authorEli Cohen <elic@nvidia.com>
Mon, 14 Nov 2022 13:17:52 +0000 (15:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Jan 2023 11:00:33 +0000 (12:00 +0100)
[ Upstream commit a6ce72c0fb6041f9871f880b2d02b294f7f49cb4 ]

Set the VLAN id to the header values field instead of overwriting the
headers criteria field.

Before this fix, VLAN filtering would not really work and tagged packets
would be forwarded unfiltered to the TIR.

Fixes: baf2ad3f6a98 ("vdpa/mlx5: Add RX MAC VLAN filter support")
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Eli Cohen <elic@nvidia.com>
Message-Id: <20221114131759.57883-2-elic@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/vdpa/mlx5/net/mlx5_vnet.c

index 90913365def43de809ba8c9ef4de1675c656816a..3fb06dcee9436c42393a571ffbe353d47146852e 100644 (file)
@@ -1468,11 +1468,13 @@ static int mlx5_vdpa_add_mac_vlan_rules(struct mlx5_vdpa_net *ndev, u8 *mac,
        dmac_v = MLX5_ADDR_OF(fte_match_param, headers_v, outer_headers.dmac_47_16);
        eth_broadcast_addr(dmac_c);
        ether_addr_copy(dmac_v, mac);
-       MLX5_SET(fte_match_set_lyr_2_4, headers_c, cvlan_tag, 1);
+       if (ndev->mvdev.actual_features & BIT_ULL(VIRTIO_NET_F_CTRL_VLAN)) {
+               MLX5_SET(fte_match_set_lyr_2_4, headers_c, cvlan_tag, 1);
+               MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c, first_vid);
+       }
        if (tagged) {
                MLX5_SET(fte_match_set_lyr_2_4, headers_v, cvlan_tag, 1);
-               MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c, first_vid);
-               MLX5_SET(fte_match_set_lyr_2_4, headers_c, first_vid, vid);
+               MLX5_SET(fte_match_set_lyr_2_4, headers_v, first_vid, vid);
        }
        flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
        dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;