@@ -2663,28 +2663,6 @@ static void cleanup_root_ns(struct mlx5_flow_root_namespace *root_ns)
2663
2663
clean_tree (& root_ns -> ns .node );
2664
2664
}
2665
2665
2666
- void mlx5_cleanup_fs (struct mlx5_core_dev * dev )
2667
- {
2668
- struct mlx5_flow_steering * steering = dev -> priv .steering ;
2669
-
2670
- cleanup_root_ns (steering -> root_ns );
2671
- cleanup_root_ns (steering -> fdb_root_ns );
2672
- steering -> fdb_root_ns = NULL ;
2673
- kfree (steering -> fdb_sub_ns );
2674
- steering -> fdb_sub_ns = NULL ;
2675
- cleanup_root_ns (steering -> port_sel_root_ns );
2676
- cleanup_root_ns (steering -> sniffer_rx_root_ns );
2677
- cleanup_root_ns (steering -> sniffer_tx_root_ns );
2678
- cleanup_root_ns (steering -> rdma_rx_root_ns );
2679
- cleanup_root_ns (steering -> rdma_tx_root_ns );
2680
- cleanup_root_ns (steering -> egress_root_ns );
2681
- mlx5_cleanup_fc_stats (dev );
2682
- kmem_cache_destroy (steering -> ftes_cache );
2683
- kmem_cache_destroy (steering -> fgs_cache );
2684
- mlx5_ft_pool_destroy (dev );
2685
- kfree (steering );
2686
- }
2687
-
2688
2666
static int init_sniffer_tx_root_ns (struct mlx5_flow_steering * steering )
2689
2667
{
2690
2668
struct fs_prio * prio ;
@@ -3086,42 +3064,27 @@ static int init_egress_root_ns(struct mlx5_flow_steering *steering)
3086
3064
return err ;
3087
3065
}
3088
3066
3089
- int mlx5_init_fs (struct mlx5_core_dev * dev )
3067
+ void mlx5_fs_core_cleanup (struct mlx5_core_dev * dev )
3090
3068
{
3091
- struct mlx5_flow_steering * steering ;
3092
- int err = 0 ;
3093
-
3094
- err = mlx5_init_fc_stats (dev );
3095
- if (err )
3096
- return err ;
3097
-
3098
- err = mlx5_ft_pool_init (dev );
3099
- if (err )
3100
- return err ;
3101
-
3102
- steering = kzalloc (sizeof (* steering ), GFP_KERNEL );
3103
- if (!steering ) {
3104
- err = - ENOMEM ;
3105
- goto err ;
3106
- }
3107
-
3108
- steering -> dev = dev ;
3109
- dev -> priv .steering = steering ;
3069
+ struct mlx5_flow_steering * steering = dev -> priv .steering ;
3110
3070
3111
- if (mlx5_fs_dr_is_supported (dev ))
3112
- steering -> mode = MLX5_FLOW_STEERING_MODE_SMFS ;
3113
- else
3114
- steering -> mode = MLX5_FLOW_STEERING_MODE_DMFS ;
3071
+ cleanup_root_ns (steering -> root_ns );
3072
+ cleanup_root_ns (steering -> fdb_root_ns );
3073
+ steering -> fdb_root_ns = NULL ;
3074
+ kfree (steering -> fdb_sub_ns );
3075
+ steering -> fdb_sub_ns = NULL ;
3076
+ cleanup_root_ns (steering -> port_sel_root_ns );
3077
+ cleanup_root_ns (steering -> sniffer_rx_root_ns );
3078
+ cleanup_root_ns (steering -> sniffer_tx_root_ns );
3079
+ cleanup_root_ns (steering -> rdma_rx_root_ns );
3080
+ cleanup_root_ns (steering -> rdma_tx_root_ns );
3081
+ cleanup_root_ns (steering -> egress_root_ns );
3082
+ }
3115
3083
3116
- steering -> fgs_cache = kmem_cache_create ("mlx5_fs_fgs" ,
3117
- sizeof (struct mlx5_flow_group ), 0 ,
3118
- 0 , NULL );
3119
- steering -> ftes_cache = kmem_cache_create ("mlx5_fs_ftes" , sizeof (struct fs_fte ), 0 ,
3120
- 0 , NULL );
3121
- if (!steering -> ftes_cache || !steering -> fgs_cache ) {
3122
- err = - ENOMEM ;
3123
- goto err ;
3124
- }
3084
+ int mlx5_fs_core_init (struct mlx5_core_dev * dev )
3085
+ {
3086
+ struct mlx5_flow_steering * steering = dev -> priv .steering ;
3087
+ int err = 0 ;
3125
3088
3126
3089
if ((((MLX5_CAP_GEN (dev , port_type ) == MLX5_CAP_PORT_TYPE_ETH ) &&
3127
3090
(MLX5_CAP_GEN (dev , nic_flow_table ))) ||
@@ -3180,8 +3143,64 @@ int mlx5_init_fs(struct mlx5_core_dev *dev)
3180
3143
}
3181
3144
3182
3145
return 0 ;
3146
+
3147
+ err :
3148
+ mlx5_fs_core_cleanup (dev );
3149
+ return err ;
3150
+ }
3151
+
3152
+ void mlx5_fs_core_free (struct mlx5_core_dev * dev )
3153
+ {
3154
+ struct mlx5_flow_steering * steering = dev -> priv .steering ;
3155
+
3156
+ kmem_cache_destroy (steering -> ftes_cache );
3157
+ kmem_cache_destroy (steering -> fgs_cache );
3158
+ kfree (steering );
3159
+ mlx5_ft_pool_destroy (dev );
3160
+ mlx5_cleanup_fc_stats (dev );
3161
+ }
3162
+
3163
+ int mlx5_fs_core_alloc (struct mlx5_core_dev * dev )
3164
+ {
3165
+ struct mlx5_flow_steering * steering ;
3166
+ int err = 0 ;
3167
+
3168
+ err = mlx5_init_fc_stats (dev );
3169
+ if (err )
3170
+ return err ;
3171
+
3172
+ err = mlx5_ft_pool_init (dev );
3173
+ if (err )
3174
+ goto err ;
3175
+
3176
+ steering = kzalloc (sizeof (* steering ), GFP_KERNEL );
3177
+ if (!steering ) {
3178
+ err = - ENOMEM ;
3179
+ goto err ;
3180
+ }
3181
+
3182
+ steering -> dev = dev ;
3183
+ dev -> priv .steering = steering ;
3184
+
3185
+ if (mlx5_fs_dr_is_supported (dev ))
3186
+ steering -> mode = MLX5_FLOW_STEERING_MODE_SMFS ;
3187
+ else
3188
+ steering -> mode = MLX5_FLOW_STEERING_MODE_DMFS ;
3189
+
3190
+ steering -> fgs_cache = kmem_cache_create ("mlx5_fs_fgs" ,
3191
+ sizeof (struct mlx5_flow_group ), 0 ,
3192
+ 0 , NULL );
3193
+ steering -> ftes_cache = kmem_cache_create ("mlx5_fs_ftes" , sizeof (struct fs_fte ), 0 ,
3194
+ 0 , NULL );
3195
+ if (!steering -> ftes_cache || !steering -> fgs_cache ) {
3196
+ err = - ENOMEM ;
3197
+ goto err ;
3198
+ }
3199
+
3200
+ return 0 ;
3201
+
3183
3202
err :
3184
- mlx5_cleanup_fs (dev );
3203
+ mlx5_fs_core_free (dev );
3185
3204
return err ;
3186
3205
}
3187
3206
0 commit comments