forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c
....@@ -90,23 +90,15 @@
9090
9191 static int arfs_disable(struct mlx5e_priv *priv)
9292 {
93
- struct mlx5_flow_destination dest = {};
94
- struct mlx5e_tir *tir = priv->indir_tir;
95
- int err = 0;
96
- int tt;
97
- int i;
93
+ int err, i;
9894
99
- dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;
10095 for (i = 0; i < ARFS_NUM_TYPES; i++) {
101
- dest.tir_num = tir[i].tirn;
102
- tt = arfs_get_tt(i);
103
- /* Modify ttc rules destination to bypass the aRFS tables*/
104
- err = mlx5_modify_rule_destination(priv->fs.ttc.rules[tt],
105
- &dest, NULL);
96
+ /* Modify ttc rules destination back to their default */
97
+ err = mlx5e_ttc_fwd_default_dest(priv, arfs_get_tt(i));
10698 if (err) {
10799 netdev_err(priv->netdev,
108
- "%s: modify ttc destination failed\n",
109
- __func__);
100
+ "%s: modify ttc[%d] default destination failed, err(%d)\n",
101
+ __func__, arfs_get_tt(i), err);
110102 return err;
111103 }
112104 }
....@@ -125,21 +117,17 @@
125117 int mlx5e_arfs_enable(struct mlx5e_priv *priv)
126118 {
127119 struct mlx5_flow_destination dest = {};
128
- int err = 0;
129
- int tt;
130
- int i;
120
+ int err, i;
131121
132122 dest.type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE;
133123 for (i = 0; i < ARFS_NUM_TYPES; i++) {
134124 dest.ft = priv->fs.arfs.arfs_tables[i].ft.t;
135
- tt = arfs_get_tt(i);
136125 /* Modify ttc rules destination to point on the aRFS FTs */
137
- err = mlx5_modify_rule_destination(priv->fs.ttc.rules[tt],
138
- &dest, NULL);
126
+ err = mlx5e_ttc_fwd_dest(priv, arfs_get_tt(i), &dest);
139127 if (err) {
140128 netdev_err(priv->netdev,
141
- "%s: modify ttc destination failed err=%d\n",
142
- __func__, err);
129
+ "%s: modify ttc[%d] dest to arfs, failed err(%d)\n",
130
+ __func__, arfs_get_tt(i), err);
143131 arfs_disable(priv);
144132 return err;
145133 }
....@@ -175,28 +163,22 @@
175163 struct mlx5e_tir *tir = priv->indir_tir;
176164 struct mlx5_flow_destination dest = {};
177165 MLX5_DECLARE_FLOW_ACT(flow_act);
178
- struct mlx5_flow_spec *spec;
179166 enum mlx5e_traffic_types tt;
180167 int err = 0;
181
-
182
- spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
183
- if (!spec) {
184
- err = -ENOMEM;
185
- goto out;
186
- }
187168
188169 dest.type = MLX5_FLOW_DESTINATION_TYPE_TIR;
189170 tt = arfs_get_tt(type);
190171 if (tt == -EINVAL) {
191172 netdev_err(priv->netdev, "%s: bad arfs_type: %d\n",
192173 __func__, type);
193
- err = -EINVAL;
194
- goto out;
174
+ return -EINVAL;
195175 }
196176
177
+ /* FIXME: Must use mlx5e_ttc_get_default_dest(),
178
+ * but can't since TTC default is not setup yet !
179
+ */
197180 dest.tir_num = tir[tt].tirn;
198
-
199
- arfs_t->default_rule = mlx5_add_flow_rules(arfs_t->ft.t, spec,
181
+ arfs_t->default_rule = mlx5_add_flow_rules(arfs_t->ft.t, NULL,
200182 &flow_act,
201183 &dest, 1);
202184 if (IS_ERR(arfs_t->default_rule)) {
....@@ -205,8 +187,7 @@
205187 netdev_err(priv->netdev, "%s: add rule failed, arfs type=%d\n",
206188 __func__, type);
207189 }
208
-out:
209
- kvfree(spec);
190
+
210191 return err;
211192 }
212193
....@@ -229,7 +210,7 @@
229210 sizeof(*ft->g), GFP_KERNEL);
230211 in = kvzalloc(inlen, GFP_KERNEL);
231212 if (!in || !ft->g) {
232
- kvfree(ft->g);
213
+ kfree(ft->g);
233214 kvfree(in);
234215 return -ENOMEM;
235216 }
....@@ -537,8 +518,11 @@
537518 rule = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
538519 if (IS_ERR(rule)) {
539520 err = PTR_ERR(rule);
540
- netdev_err(priv->netdev, "%s: add rule(filter id=%d, rq idx=%d) failed, err=%d\n",
541
- __func__, arfs_rule->filter_id, arfs_rule->rxq, err);
521
+ priv->channel_stats[arfs_rule->rxq].rq.arfs_err++;
522
+ mlx5e_dbg(HW, priv,
523
+ "%s: add rule(filter id=%d, rq idx=%d, ip proto=0x%x) failed,err=%d\n",
524
+ __func__, arfs_rule->filter_id, arfs_rule->rxq,
525
+ tuple->ip_proto, err);
542526 }
543527
544528 out: