net/mlx5e: Improve IPsec flow steering autogroup
authorLeon Romanovsky <leonro@nvidia.com>
Fri, 2 Dec 2022 20:14:49 +0000 (22:14 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Thu, 8 Dec 2022 09:36:05 +0000 (10:36 +0100)
Flow steering API separates newly created rules based on their
match criteria. Right now, all IPsec tables are created with one
group and suffers from not-optimal FS performance.

Count number of different match criteria for relevant tables, and
set proper value at the table creation.

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c

index dbe35accaebf20f267bd1454a0e1b427a8e51e4b..0af831128c4e8b447f6bc6501b78cc89e1eb979d 100644 (file)
@@ -196,7 +196,7 @@ static int rx_create(struct mlx5_core_dev *mdev, struct mlx5e_ipsec *ipsec,
 
        /* Create FT */
        ft = ipsec_ft_create(ns, MLX5E_ACCEL_FS_ESP_FT_LEVEL, MLX5E_NIC_PRIO,
-                            1);
+                            2);
        if (IS_ERR(ft)) {
                err = PTR_ERR(ft);
                goto err_fs_ft;
@@ -208,7 +208,7 @@ static int rx_create(struct mlx5_core_dev *mdev, struct mlx5e_ipsec *ipsec,
                goto err_fs;
 
        ft = ipsec_ft_create(ns, MLX5E_ACCEL_FS_POL_FT_LEVEL, MLX5E_NIC_PRIO,
-                            1);
+                            2);
        if (IS_ERR(ft)) {
                err = PTR_ERR(ft);
                goto err_pol_ft;
@@ -307,13 +307,13 @@ static int tx_create(struct mlx5_core_dev *mdev, struct mlx5e_ipsec_tx *tx)
        struct mlx5_flow_table *ft;
        int err;
 
-       ft = ipsec_ft_create(tx->ns, 1, 0, 1);
+       ft = ipsec_ft_create(tx->ns, 1, 0, 4);
        if (IS_ERR(ft))
                return PTR_ERR(ft);
 
        tx->ft.sa = ft;
 
-       ft = ipsec_ft_create(tx->ns, 0, 0, 1);
+       ft = ipsec_ft_create(tx->ns, 0, 0, 2);
        if (IS_ERR(ft)) {
                err = PTR_ERR(ft);
                goto err_pol_ft;