net/mlx5e: Move MACsec flow steering and statistics database from ethernet to core
authorPatrisious Haddad <phaddad@nvidia.com>
Tue, 6 Dec 2022 12:33:49 +0000 (14:33 +0200)
committerLeon Romanovsky <leon@kernel.org>
Sun, 20 Aug 2023 09:35:23 +0000 (12:35 +0300)
Since now MACsec flow steering (macsec_fs) and MACsec statistics (stats)
are maintained by the core driver, move their data as well to be saved
inside core structures instead of staying part of ethernet MACsec database.

In addition cleanup all MACsec stats functions from the ethernet MACsec
code and move what's needed to be part of macsec_fs instead.

Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c
drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.h
drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_stats.c
drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c
drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.h
include/linux/mlx5/driver.h

index 831d83094abd2fb6305686ab5bc20bab1f82a0ee..5e8ad355c67ff1b6b52408cfd794326b3e7012a1 100644 (file)
@@ -124,7 +124,6 @@ struct mlx5e_macsec_device {
 struct mlx5e_macsec {
        struct list_head macsec_device_list_head;
        int num_of_devices;
-       struct mlx5_macsec_fs *macsec_fs;
        struct mutex lock; /* Protects mlx5e_macsec internal contexts */
 
        /* Tx sci -> fs id mapping handling */
@@ -135,9 +134,6 @@ struct mlx5e_macsec {
 
        struct mlx5_core_dev *mdev;
 
-       /* Stats manage */
-       struct mlx5_macsec_stats stats;
-
        /* ASO */
        struct mlx5e_macsec_aso aso;
 
@@ -343,7 +339,7 @@ static void mlx5e_macsec_cleanup_sa(struct mlx5e_macsec *macsec,
        if (!sa->macsec_rule)
                return;
 
-       mlx5_macsec_fs_del_rule(macsec->macsec_fs, sa->macsec_rule, action);
+       mlx5_macsec_fs_del_rule(macsec->mdev->macsec_fs, sa->macsec_rule, action);
        mlx5e_macsec_destroy_object(macsec->mdev, sa->macsec_obj_id);
        sa->macsec_rule = NULL;
 }
@@ -386,7 +382,7 @@ static int mlx5e_macsec_init_sa(struct macsec_context *ctx,
        rule_attrs.action = (is_tx) ? MLX5_ACCEL_MACSEC_ACTION_ENCRYPT :
                                      MLX5_ACCEL_MACSEC_ACTION_DECRYPT;
 
-       macsec_rule = mlx5_macsec_fs_add_rule(macsec->macsec_fs, ctx, &rule_attrs, &sa->fs_id);
+       macsec_rule = mlx5_macsec_fs_add_rule(mdev->macsec_fs, ctx, &rule_attrs, &sa->fs_id);
        if (!macsec_rule) {
                err = -ENOMEM;
                goto destroy_macsec_object;
@@ -1677,19 +1673,6 @@ bool mlx5e_is_macsec_device(const struct mlx5_core_dev *mdev)
        return true;
 }
 
-void mlx5e_macsec_get_stats_fill(struct mlx5e_macsec *macsec, void *macsec_stats)
-{
-       mlx5_macsec_fs_get_stats_fill(macsec->macsec_fs, macsec_stats);
-}
-
-struct mlx5_macsec_stats *mlx5e_macsec_get_stats(struct mlx5e_macsec *macsec)
-{
-       if (!macsec)
-               return NULL;
-
-       return &macsec->stats;
-}
-
 static const struct macsec_ops macsec_offload_ops = {
        .mdo_add_txsa = mlx5e_macsec_add_txsa,
        .mdo_upd_txsa = mlx5e_macsec_upd_txsa,
@@ -1827,7 +1810,7 @@ int mlx5e_macsec_init(struct mlx5e_priv *priv)
                goto err_out;
        }
 
-       macsec->macsec_fs = macsec_fs;
+       mdev->macsec_fs = macsec_fs;
 
        macsec->nb.notifier_call = macsec_obj_change_event;
        mlx5_notifier_register(mdev, &macsec->nb);
@@ -1857,7 +1840,7 @@ void mlx5e_macsec_cleanup(struct mlx5e_priv *priv)
                return;
 
        mlx5_notifier_unregister(mdev, &macsec->nb);
-       mlx5_macsec_fs_cleanup(macsec->macsec_fs);
+       mlx5_macsec_fs_cleanup(mdev->macsec_fs);
        destroy_workqueue(macsec->wq);
        mlx5e_macsec_aso_cleanup(&macsec->aso, mdev);
        rhashtable_destroy(&macsec->sci_hash);
index 47dc1d4448d9b6e5b80e1ee7418ba3205c825b62..2ecd769585f434187b75e76b798e50ad4e938ac3 100644 (file)
@@ -37,8 +37,6 @@ static inline bool mlx5e_macsec_is_rx_flow(struct mlx5_cqe64 *cqe)
 void mlx5e_macsec_offload_handle_rx_skb(struct net_device *netdev, struct sk_buff *skb,
                                        struct mlx5_cqe64 *cqe);
 bool mlx5e_is_macsec_device(const struct mlx5_core_dev *mdev);
-void mlx5e_macsec_get_stats_fill(struct mlx5e_macsec *macsec, void *macsec_stats);
-struct mlx5_macsec_stats *mlx5e_macsec_get_stats(struct mlx5e_macsec *macsec);
 
 #else
 
index 8326a593b3fb6b19127bb8506ac41d54a16fcc4c..4559ee16a11a2cb4ca10308726b58312c362af61 100644 (file)
@@ -52,6 +52,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(macsec_hw)
 
 static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(macsec_hw)
 {
+       struct mlx5_macsec_fs *macsec_fs;
        int i;
 
        if (!priv->macsec)
@@ -60,9 +61,10 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(macsec_hw)
        if (!mlx5e_is_macsec_device(priv->mdev))
                return idx;
 
-       mlx5e_macsec_get_stats_fill(priv->macsec, mlx5e_macsec_get_stats(priv->macsec));
+       macsec_fs = priv->mdev->macsec_fs;
+       mlx5_macsec_fs_get_stats_fill(macsec_fs, mlx5_macsec_fs_get_stats(macsec_fs));
        for (i = 0; i < NUM_MACSEC_HW_COUNTERS; i++)
-               data[idx++] = MLX5E_READ_CTR64_CPU(mlx5e_macsec_get_stats(priv->macsec),
+               data[idx++] = MLX5E_READ_CTR64_CPU(mlx5_macsec_fs_get_stats(macsec_fs),
                                                   mlx5e_macsec_hw_stats_desc,
                                                   i);
 
index c585d61324bf14d8c74ed12bd9fc782c210cc441..11f9c5a8e43a9a340cdfaeca04b657be8d0926d7 100644 (file)
@@ -106,6 +106,9 @@ struct mlx5_macsec_fs {
        struct net_device *netdev;
        struct mlx5_macsec_tx *tx_fs;
        struct mlx5_macsec_rx *rx_fs;
+
+       /* Stats manage */
+       struct mlx5_macsec_stats stats;
 };
 
 static void macsec_fs_destroy_groups(struct mlx5_macsec_flow_table *ft)
@@ -1355,6 +1358,14 @@ void mlx5_macsec_fs_get_stats_fill(struct mlx5_macsec_fs *macsec_fs, void *macse
                              &stats->macsec_rx_pkts_drop, &stats->macsec_rx_bytes_drop);
 }
 
+struct mlx5_macsec_stats *mlx5_macsec_fs_get_stats(struct mlx5_macsec_fs *macsec_fs)
+{
+       if (!macsec_fs)
+               return NULL;
+
+       return &macsec_fs->stats;
+}
+
 union mlx5_macsec_rule *
 mlx5_macsec_fs_add_rule(struct mlx5_macsec_fs *macsec_fs,
                        const struct macsec_context *macsec_ctx,
index 6a749e036e6885d54cc3f7bc32912f56a52cc9a8..c0c28d08eae512b1236c6c3069dd688be628d668 100644 (file)
@@ -56,6 +56,7 @@ void mlx5_macsec_fs_del_rule(struct mlx5_macsec_fs *macsec_fs,
                             int action);
 
 void mlx5_macsec_fs_get_stats_fill(struct mlx5_macsec_fs *macsec_fs, void *macsec_stats);
+struct mlx5_macsec_stats *mlx5_macsec_fs_get_stats(struct mlx5_macsec_fs *macsec_fs);
 
 #endif
 
index 25d0528f92197ebd8526032022704fb1573858aa..0e80241c270ff56ed5d6aa984f680c867932eeaa 100644 (file)
@@ -805,6 +805,9 @@ struct mlx5_core_dev {
        u32                      vsc_addr;
        struct mlx5_hv_vhca     *hv_vhca;
        struct mlx5_thermal     *thermal;
+#ifdef CONFIG_MLX5_MACSEC
+       struct mlx5_macsec_fs *macsec_fs;
+#endif
 };
 
 struct mlx5_db {