forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
....@@ -36,14 +36,14 @@
3636
3737 int mlx5_core_alloc_transport_domain(struct mlx5_core_dev *dev, u32 *tdn)
3838 {
39
- u32 in[MLX5_ST_SZ_DW(alloc_transport_domain_in)] = {0};
40
- u32 out[MLX5_ST_SZ_DW(alloc_transport_domain_out)] = {0};
39
+ u32 out[MLX5_ST_SZ_DW(alloc_transport_domain_out)] = {};
40
+ u32 in[MLX5_ST_SZ_DW(alloc_transport_domain_in)] = {};
4141 int err;
4242
4343 MLX5_SET(alloc_transport_domain_in, in, opcode,
4444 MLX5_CMD_OP_ALLOC_TRANSPORT_DOMAIN);
4545
46
- err = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
46
+ err = mlx5_cmd_exec_inout(dev, alloc_transport_domain, in, out);
4747 if (!err)
4848 *tdn = MLX5_GET(alloc_transport_domain_out, out,
4949 transport_domain);
....@@ -54,19 +54,18 @@
5454
5555 void mlx5_core_dealloc_transport_domain(struct mlx5_core_dev *dev, u32 tdn)
5656 {
57
- u32 in[MLX5_ST_SZ_DW(dealloc_transport_domain_in)] = {0};
58
- u32 out[MLX5_ST_SZ_DW(dealloc_transport_domain_out)] = {0};
57
+ u32 in[MLX5_ST_SZ_DW(dealloc_transport_domain_in)] = {};
5958
6059 MLX5_SET(dealloc_transport_domain_in, in, opcode,
6160 MLX5_CMD_OP_DEALLOC_TRANSPORT_DOMAIN);
6261 MLX5_SET(dealloc_transport_domain_in, in, transport_domain, tdn);
63
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
62
+ mlx5_cmd_exec_in(dev, dealloc_transport_domain, in);
6463 }
6564 EXPORT_SYMBOL(mlx5_core_dealloc_transport_domain);
6665
6766 int mlx5_core_create_rq(struct mlx5_core_dev *dev, u32 *in, int inlen, u32 *rqn)
6867 {
69
- u32 out[MLX5_ST_SZ_DW(create_rq_out)] = {0};
68
+ u32 out[MLX5_ST_SZ_DW(create_rq_out)] = {};
7069 int err;
7170
7271 MLX5_SET(create_rq_in, in, opcode, MLX5_CMD_OP_CREATE_RQ);
....@@ -78,44 +77,39 @@
7877 }
7978 EXPORT_SYMBOL(mlx5_core_create_rq);
8079
81
-int mlx5_core_modify_rq(struct mlx5_core_dev *dev, u32 rqn, u32 *in, int inlen)
80
+int mlx5_core_modify_rq(struct mlx5_core_dev *dev, u32 rqn, u32 *in)
8281 {
83
- u32 out[MLX5_ST_SZ_DW(modify_rq_out)];
84
-
8582 MLX5_SET(modify_rq_in, in, rqn, rqn);
8683 MLX5_SET(modify_rq_in, in, opcode, MLX5_CMD_OP_MODIFY_RQ);
8784
88
- memset(out, 0, sizeof(out));
89
- return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
85
+ return mlx5_cmd_exec_in(dev, modify_rq, in);
9086 }
9187 EXPORT_SYMBOL(mlx5_core_modify_rq);
9288
9389 void mlx5_core_destroy_rq(struct mlx5_core_dev *dev, u32 rqn)
9490 {
95
- u32 in[MLX5_ST_SZ_DW(destroy_rq_in)] = {0};
96
- u32 out[MLX5_ST_SZ_DW(destroy_rq_out)] = {0};
91
+ u32 in[MLX5_ST_SZ_DW(destroy_rq_in)] = {};
9792
9893 MLX5_SET(destroy_rq_in, in, opcode, MLX5_CMD_OP_DESTROY_RQ);
9994 MLX5_SET(destroy_rq_in, in, rqn, rqn);
100
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
95
+ mlx5_cmd_exec_in(dev, destroy_rq, in);
10196 }
10297 EXPORT_SYMBOL(mlx5_core_destroy_rq);
10398
10499 int mlx5_core_query_rq(struct mlx5_core_dev *dev, u32 rqn, u32 *out)
105100 {
106
- u32 in[MLX5_ST_SZ_DW(query_rq_in)] = {0};
107
- int outlen = MLX5_ST_SZ_BYTES(query_rq_out);
101
+ u32 in[MLX5_ST_SZ_DW(query_rq_in)] = {};
108102
109103 MLX5_SET(query_rq_in, in, opcode, MLX5_CMD_OP_QUERY_RQ);
110104 MLX5_SET(query_rq_in, in, rqn, rqn);
111105
112
- return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
106
+ return mlx5_cmd_exec_inout(dev, query_rq, in, out);
113107 }
114108 EXPORT_SYMBOL(mlx5_core_query_rq);
115109
116110 int mlx5_core_create_sq(struct mlx5_core_dev *dev, u32 *in, int inlen, u32 *sqn)
117111 {
118
- u32 out[MLX5_ST_SZ_DW(create_sq_out)] = {0};
112
+ u32 out[MLX5_ST_SZ_DW(create_sq_out)] = {};
119113 int err;
120114
121115 MLX5_SET(create_sq_in, in, opcode, MLX5_CMD_OP_CREATE_SQ);
....@@ -126,34 +120,30 @@
126120 return err;
127121 }
128122
129
-int mlx5_core_modify_sq(struct mlx5_core_dev *dev, u32 sqn, u32 *in, int inlen)
123
+int mlx5_core_modify_sq(struct mlx5_core_dev *dev, u32 sqn, u32 *in)
130124 {
131
- u32 out[MLX5_ST_SZ_DW(modify_sq_out)] = {0};
132
-
133125 MLX5_SET(modify_sq_in, in, sqn, sqn);
134126 MLX5_SET(modify_sq_in, in, opcode, MLX5_CMD_OP_MODIFY_SQ);
135
- return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
127
+ return mlx5_cmd_exec_in(dev, modify_sq, in);
136128 }
137129 EXPORT_SYMBOL(mlx5_core_modify_sq);
138130
139131 void mlx5_core_destroy_sq(struct mlx5_core_dev *dev, u32 sqn)
140132 {
141
- u32 in[MLX5_ST_SZ_DW(destroy_sq_in)] = {0};
142
- u32 out[MLX5_ST_SZ_DW(destroy_sq_out)] = {0};
133
+ u32 in[MLX5_ST_SZ_DW(destroy_sq_in)] = {};
143134
144135 MLX5_SET(destroy_sq_in, in, opcode, MLX5_CMD_OP_DESTROY_SQ);
145136 MLX5_SET(destroy_sq_in, in, sqn, sqn);
146
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
137
+ mlx5_cmd_exec_in(dev, destroy_sq, in);
147138 }
148139
149140 int mlx5_core_query_sq(struct mlx5_core_dev *dev, u32 sqn, u32 *out)
150141 {
151
- u32 in[MLX5_ST_SZ_DW(query_sq_in)] = {0};
152
- int outlen = MLX5_ST_SZ_BYTES(query_sq_out);
142
+ u32 in[MLX5_ST_SZ_DW(query_sq_in)] = {};
153143
154144 MLX5_SET(query_sq_in, in, opcode, MLX5_CMD_OP_QUERY_SQ);
155145 MLX5_SET(query_sq_in, in, sqn, sqn);
156
- return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
146
+ return mlx5_cmd_exec_inout(dev, query_sq, in, out);
157147 }
158148 EXPORT_SYMBOL(mlx5_core_query_sq);
159149
....@@ -182,16 +172,13 @@
182172 }
183173 EXPORT_SYMBOL_GPL(mlx5_core_query_sq_state);
184174
185
-int mlx5_core_create_tir(struct mlx5_core_dev *dev, u32 *in, int inlen,
186
- u32 *tirn)
175
+int mlx5_core_create_tir(struct mlx5_core_dev *dev, u32 *in, u32 *tirn)
187176 {
188
- u32 out[MLX5_ST_SZ_DW(create_tir_out)] = {0};
177
+ u32 out[MLX5_ST_SZ_DW(create_tir_out)] = {};
189178 int err;
190179
191180 MLX5_SET(create_tir_in, in, opcode, MLX5_CMD_OP_CREATE_TIR);
192
-
193
- memset(out, 0, sizeof(out));
194
- err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
181
+ err = mlx5_cmd_exec_inout(dev, create_tir, in, out);
195182 if (!err)
196183 *tirn = MLX5_GET(create_tir_out, out, tirn);
197184
....@@ -199,35 +186,30 @@
199186 }
200187 EXPORT_SYMBOL(mlx5_core_create_tir);
201188
202
-int mlx5_core_modify_tir(struct mlx5_core_dev *dev, u32 tirn, u32 *in,
203
- int inlen)
189
+int mlx5_core_modify_tir(struct mlx5_core_dev *dev, u32 tirn, u32 *in)
204190 {
205
- u32 out[MLX5_ST_SZ_DW(modify_tir_out)] = {0};
206
-
207191 MLX5_SET(modify_tir_in, in, tirn, tirn);
208192 MLX5_SET(modify_tir_in, in, opcode, MLX5_CMD_OP_MODIFY_TIR);
209
- return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
193
+ return mlx5_cmd_exec_in(dev, modify_tir, in);
210194 }
211195
212196 void mlx5_core_destroy_tir(struct mlx5_core_dev *dev, u32 tirn)
213197 {
214
- u32 in[MLX5_ST_SZ_DW(destroy_tir_in)] = {0};
215
- u32 out[MLX5_ST_SZ_DW(destroy_tir_out)] = {0};
198
+ u32 in[MLX5_ST_SZ_DW(destroy_tir_in)] = {};
216199
217200 MLX5_SET(destroy_tir_in, in, opcode, MLX5_CMD_OP_DESTROY_TIR);
218201 MLX5_SET(destroy_tir_in, in, tirn, tirn);
219
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
202
+ mlx5_cmd_exec_in(dev, destroy_tir, in);
220203 }
221204 EXPORT_SYMBOL(mlx5_core_destroy_tir);
222205
223
-int mlx5_core_create_tis(struct mlx5_core_dev *dev, u32 *in, int inlen,
224
- u32 *tisn)
206
+int mlx5_core_create_tis(struct mlx5_core_dev *dev, u32 *in, u32 *tisn)
225207 {
226
- u32 out[MLX5_ST_SZ_DW(create_tis_out)] = {0};
208
+ u32 out[MLX5_ST_SZ_DW(create_tis_out)] = {};
227209 int err;
228210
229211 MLX5_SET(create_tis_in, in, opcode, MLX5_CMD_OP_CREATE_TIS);
230
- err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
212
+ err = mlx5_cmd_exec_inout(dev, create_tis, in, out);
231213 if (!err)
232214 *tisn = MLX5_GET(create_tis_out, out, tisn);
233215
....@@ -235,142 +217,29 @@
235217 }
236218 EXPORT_SYMBOL(mlx5_core_create_tis);
237219
238
-int mlx5_core_modify_tis(struct mlx5_core_dev *dev, u32 tisn, u32 *in,
239
- int inlen)
220
+int mlx5_core_modify_tis(struct mlx5_core_dev *dev, u32 tisn, u32 *in)
240221 {
241
- u32 out[MLX5_ST_SZ_DW(modify_tis_out)] = {0};
242
-
243222 MLX5_SET(modify_tis_in, in, tisn, tisn);
244223 MLX5_SET(modify_tis_in, in, opcode, MLX5_CMD_OP_MODIFY_TIS);
245224
246
- return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
225
+ return mlx5_cmd_exec_in(dev, modify_tis, in);
247226 }
248227 EXPORT_SYMBOL(mlx5_core_modify_tis);
249228
250229 void mlx5_core_destroy_tis(struct mlx5_core_dev *dev, u32 tisn)
251230 {
252
- u32 in[MLX5_ST_SZ_DW(destroy_tis_in)] = {0};
253
- u32 out[MLX5_ST_SZ_DW(destroy_tis_out)] = {0};
231
+ u32 in[MLX5_ST_SZ_DW(destroy_tis_in)] = {};
254232
255233 MLX5_SET(destroy_tis_in, in, opcode, MLX5_CMD_OP_DESTROY_TIS);
256234 MLX5_SET(destroy_tis_in, in, tisn, tisn);
257
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
235
+ mlx5_cmd_exec_in(dev, destroy_tis, in);
258236 }
259237 EXPORT_SYMBOL(mlx5_core_destroy_tis);
260
-
261
-int mlx5_core_create_rmp(struct mlx5_core_dev *dev, u32 *in, int inlen,
262
- u32 *rmpn)
263
-{
264
- u32 out[MLX5_ST_SZ_DW(create_rmp_out)] = {0};
265
- int err;
266
-
267
- MLX5_SET(create_rmp_in, in, opcode, MLX5_CMD_OP_CREATE_RMP);
268
- err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
269
- if (!err)
270
- *rmpn = MLX5_GET(create_rmp_out, out, rmpn);
271
-
272
- return err;
273
-}
274
-
275
-int mlx5_core_modify_rmp(struct mlx5_core_dev *dev, u32 *in, int inlen)
276
-{
277
- u32 out[MLX5_ST_SZ_DW(modify_rmp_out)] = {0};
278
-
279
- MLX5_SET(modify_rmp_in, in, opcode, MLX5_CMD_OP_MODIFY_RMP);
280
- return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
281
-}
282
-
283
-int mlx5_core_destroy_rmp(struct mlx5_core_dev *dev, u32 rmpn)
284
-{
285
- u32 in[MLX5_ST_SZ_DW(destroy_rmp_in)] = {0};
286
- u32 out[MLX5_ST_SZ_DW(destroy_rmp_out)] = {0};
287
-
288
- MLX5_SET(destroy_rmp_in, in, opcode, MLX5_CMD_OP_DESTROY_RMP);
289
- MLX5_SET(destroy_rmp_in, in, rmpn, rmpn);
290
- return mlx5_cmd_exec(dev, in, sizeof(in), out,
291
- sizeof(out));
292
-}
293
-
294
-int mlx5_core_query_rmp(struct mlx5_core_dev *dev, u32 rmpn, u32 *out)
295
-{
296
- u32 in[MLX5_ST_SZ_DW(query_rmp_in)] = {0};
297
- int outlen = MLX5_ST_SZ_BYTES(query_rmp_out);
298
-
299
- MLX5_SET(query_rmp_in, in, opcode, MLX5_CMD_OP_QUERY_RMP);
300
- MLX5_SET(query_rmp_in, in, rmpn, rmpn);
301
- return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
302
-}
303
-
304
-int mlx5_core_arm_rmp(struct mlx5_core_dev *dev, u32 rmpn, u16 lwm)
305
-{
306
- void *in;
307
- void *rmpc;
308
- void *wq;
309
- void *bitmask;
310
- int err;
311
-
312
- in = kvzalloc(MLX5_ST_SZ_BYTES(modify_rmp_in), GFP_KERNEL);
313
- if (!in)
314
- return -ENOMEM;
315
-
316
- rmpc = MLX5_ADDR_OF(modify_rmp_in, in, ctx);
317
- bitmask = MLX5_ADDR_OF(modify_rmp_in, in, bitmask);
318
- wq = MLX5_ADDR_OF(rmpc, rmpc, wq);
319
-
320
- MLX5_SET(modify_rmp_in, in, rmp_state, MLX5_RMPC_STATE_RDY);
321
- MLX5_SET(modify_rmp_in, in, rmpn, rmpn);
322
- MLX5_SET(wq, wq, lwm, lwm);
323
- MLX5_SET(rmp_bitmask, bitmask, lwm, 1);
324
- MLX5_SET(rmpc, rmpc, state, MLX5_RMPC_STATE_RDY);
325
-
326
- err = mlx5_core_modify_rmp(dev, in, MLX5_ST_SZ_BYTES(modify_rmp_in));
327
-
328
- kvfree(in);
329
-
330
- return err;
331
-}
332
-
333
-int mlx5_core_create_xsrq(struct mlx5_core_dev *dev, u32 *in, int inlen,
334
- u32 *xsrqn)
335
-{
336
- u32 out[MLX5_ST_SZ_DW(create_xrc_srq_out)] = {0};
337
- int err;
338
-
339
- MLX5_SET(create_xrc_srq_in, in, opcode, MLX5_CMD_OP_CREATE_XRC_SRQ);
340
- err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
341
- if (!err)
342
- *xsrqn = MLX5_GET(create_xrc_srq_out, out, xrc_srqn);
343
-
344
- return err;
345
-}
346
-
347
-int mlx5_core_destroy_xsrq(struct mlx5_core_dev *dev, u32 xsrqn)
348
-{
349
- u32 in[MLX5_ST_SZ_DW(destroy_xrc_srq_in)] = {0};
350
- u32 out[MLX5_ST_SZ_DW(destroy_xrc_srq_out)] = {0};
351
-
352
- MLX5_SET(destroy_xrc_srq_in, in, opcode, MLX5_CMD_OP_DESTROY_XRC_SRQ);
353
- MLX5_SET(destroy_xrc_srq_in, in, xrc_srqn, xsrqn);
354
- return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
355
-}
356
-
357
-int mlx5_core_arm_xsrq(struct mlx5_core_dev *dev, u32 xsrqn, u16 lwm)
358
-{
359
- u32 in[MLX5_ST_SZ_DW(arm_xrc_srq_in)] = {0};
360
- u32 out[MLX5_ST_SZ_DW(arm_xrc_srq_out)] = {0};
361
-
362
- MLX5_SET(arm_xrc_srq_in, in, opcode, MLX5_CMD_OP_ARM_XRC_SRQ);
363
- MLX5_SET(arm_xrc_srq_in, in, xrc_srqn, xsrqn);
364
- MLX5_SET(arm_xrc_srq_in, in, lwm, lwm);
365
- MLX5_SET(arm_xrc_srq_in, in, op_mod,
366
- MLX5_ARM_XRC_SRQ_IN_OP_MOD_XRC_SRQ);
367
- return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
368
-}
369238
370239 int mlx5_core_create_rqt(struct mlx5_core_dev *dev, u32 *in, int inlen,
371240 u32 *rqtn)
372241 {
373
- u32 out[MLX5_ST_SZ_DW(create_rqt_out)] = {0};
242
+ u32 out[MLX5_ST_SZ_DW(create_rqt_out)] = {};
374243 int err;
375244
376245 MLX5_SET(create_rqt_in, in, opcode, MLX5_CMD_OP_CREATE_RQT);
....@@ -385,7 +254,7 @@
385254 int mlx5_core_modify_rqt(struct mlx5_core_dev *dev, u32 rqtn, u32 *in,
386255 int inlen)
387256 {
388
- u32 out[MLX5_ST_SZ_DW(modify_rqt_out)] = {0};
257
+ u32 out[MLX5_ST_SZ_DW(modify_rqt_out)] = {};
389258
390259 MLX5_SET(modify_rqt_in, in, rqtn, rqtn);
391260 MLX5_SET(modify_rqt_in, in, opcode, MLX5_CMD_OP_MODIFY_RQT);
....@@ -394,12 +263,11 @@
394263
395264 void mlx5_core_destroy_rqt(struct mlx5_core_dev *dev, u32 rqtn)
396265 {
397
- u32 in[MLX5_ST_SZ_DW(destroy_rqt_in)] = {0};
398
- u32 out[MLX5_ST_SZ_DW(destroy_rqt_out)] = {0};
266
+ u32 in[MLX5_ST_SZ_DW(destroy_rqt_in)] = {};
399267
400268 MLX5_SET(destroy_rqt_in, in, opcode, MLX5_CMD_OP_DESTROY_RQT);
401269 MLX5_SET(destroy_rqt_in, in, rqtn, rqtn);
402
- mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
270
+ mlx5_cmd_exec_in(dev, destroy_rqt, in);
403271 }
404272 EXPORT_SYMBOL(mlx5_core_destroy_rqt);
405273
....@@ -484,7 +352,7 @@
484352 int curr_state, int next_state,
485353 u16 peer_vhca, u32 peer_sq)
486354 {
487
- u32 in[MLX5_ST_SZ_DW(modify_rq_in)] = {0};
355
+ u32 in[MLX5_ST_SZ_DW(modify_rq_in)] = {};
488356 void *rqc;
489357
490358 rqc = MLX5_ADDR_OF(modify_rq_in, in, ctx);
....@@ -497,8 +365,7 @@
497365 MLX5_SET(modify_rq_in, in, rq_state, curr_state);
498366 MLX5_SET(rqc, rqc, state, next_state);
499367
500
- return mlx5_core_modify_rq(func_mdev, rqn,
501
- in, MLX5_ST_SZ_BYTES(modify_rq_in));
368
+ return mlx5_core_modify_rq(func_mdev, rqn, in);
502369 }
503370
504371 static int mlx5_hairpin_modify_sq(struct mlx5_core_dev *peer_mdev, u32 sqn,
....@@ -518,8 +385,7 @@
518385 MLX5_SET(modify_sq_in, in, sq_state, curr_state);
519386 MLX5_SET(sqc, sqc, state, next_state);
520387
521
- return mlx5_core_modify_sq(peer_mdev, sqn,
522
- in, MLX5_ST_SZ_BYTES(modify_sq_in));
388
+ return mlx5_core_modify_sq(peer_mdev, sqn, in);
523389 }
524390
525391 static int mlx5_hairpin_pair_queues(struct mlx5_hairpin *hp)
....@@ -558,6 +424,15 @@
558424 return err;
559425 }
560426
427
+static void mlx5_hairpin_unpair_peer_sq(struct mlx5_hairpin *hp)
428
+{
429
+ int i;
430
+
431
+ for (i = 0; i < hp->num_channels; i++)
432
+ mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i], MLX5_SQC_STATE_RDY,
433
+ MLX5_SQC_STATE_RST, 0, 0);
434
+}
435
+
561436 static void mlx5_hairpin_unpair_queues(struct mlx5_hairpin *hp)
562437 {
563438 int i;
....@@ -566,13 +441,9 @@
566441 for (i = 0; i < hp->num_channels; i++)
567442 mlx5_hairpin_modify_rq(hp->func_mdev, hp->rqn[i], MLX5_RQC_STATE_RDY,
568443 MLX5_RQC_STATE_RST, 0, 0);
569
-
570444 /* unset peer SQs */
571
- if (hp->peer_gone)
572
- return;
573
- for (i = 0; i < hp->num_channels; i++)
574
- mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i], MLX5_SQC_STATE_RDY,
575
- MLX5_SQC_STATE_RST, 0, 0);
445
+ if (!hp->peer_gone)
446
+ mlx5_hairpin_unpair_peer_sq(hp);
576447 }
577448
578449 struct mlx5_hairpin *
....@@ -619,3 +490,16 @@
619490 mlx5_hairpin_destroy_queues(hp);
620491 kfree(hp);
621492 }
493
+
494
+void mlx5_core_hairpin_clear_dead_peer(struct mlx5_hairpin *hp)
495
+{
496
+ int i;
497
+
498
+ mlx5_hairpin_unpair_peer_sq(hp);
499
+
500
+ /* destroy peer SQ */
501
+ for (i = 0; i < hp->num_channels; i++)
502
+ mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[i]);
503
+
504
+ hp->peer_gone = true;
505
+}