Lines Matching defs:hp

311 static int mlx5_hairpin_create_queues(struct mlx5_hairpin *hp,
316 for (i = 0; i < hp->num_channels; i++) {
317 err = mlx5_hairpin_create_rq(hp->func_mdev, params, &hp->rqn[i]);
322 for (i = 0; i < hp->num_channels; i++) {
323 err = mlx5_hairpin_create_sq(hp->peer_mdev, params, &hp->sqn[i]);
332 mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[j]);
333 i = hp->num_channels;
336 mlx5_core_destroy_rq(hp->func_mdev, hp->rqn[j]);
340 static void mlx5_hairpin_destroy_queues(struct mlx5_hairpin *hp)
344 for (i = 0; i < hp->num_channels; i++) {
345 mlx5_core_destroy_rq(hp->func_mdev, hp->rqn[i]);
346 if (!hp->peer_gone)
347 mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[i]);
391 static int mlx5_hairpin_pair_queues(struct mlx5_hairpin *hp)
396 for (i = 0; i < hp->num_channels; i++) {
397 err = mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i],
399 MLX5_CAP_GEN(hp->func_mdev, vhca_id), hp->rqn[i]);
405 for (i = 0; i < hp->num_channels; i++) {
406 err = mlx5_hairpin_modify_rq(hp->func_mdev, hp->rqn[i],
408 MLX5_CAP_GEN(hp->peer_mdev, vhca_id), hp->sqn[i]);
417 mlx5_hairpin_modify_rq(hp->func_mdev, hp->rqn[j], MLX5_RQC_STATE_RDY,
419 i = hp->num_channels;
422 mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[j], MLX5_SQC_STATE_RDY,
427 static void mlx5_hairpin_unpair_peer_sq(struct mlx5_hairpin *hp)
431 for (i = 0; i < hp->num_channels; i++)
432 mlx5_hairpin_modify_sq(hp->peer_mdev, hp->sqn[i], MLX5_SQC_STATE_RDY,
436 static void mlx5_hairpin_unpair_queues(struct mlx5_hairpin *hp)
441 for (i = 0; i < hp->num_channels; i++)
442 mlx5_hairpin_modify_rq(hp->func_mdev, hp->rqn[i], MLX5_RQC_STATE_RDY,
445 if (!hp->peer_gone)
446 mlx5_hairpin_unpair_peer_sq(hp);
454 struct mlx5_hairpin *hp;
457 size = sizeof(*hp) + params->num_channels * 2 * sizeof(u32);
458 hp = kzalloc(size, GFP_KERNEL);
459 if (!hp)
462 hp->func_mdev = func_mdev;
463 hp->peer_mdev = peer_mdev;
464 hp->num_channels = params->num_channels;
466 hp->rqn = (void *)hp + sizeof(*hp);
467 hp->sqn = hp->rqn + params->num_channels;
470 err = mlx5_hairpin_create_queues(hp, params);
474 err = mlx5_hairpin_pair_queues(hp);
478 return hp;
481 mlx5_hairpin_destroy_queues(hp);
483 kfree(hp);
487 void mlx5_core_hairpin_destroy(struct mlx5_hairpin *hp)
489 mlx5_hairpin_unpair_queues(hp);
490 mlx5_hairpin_destroy_queues(hp);
491 kfree(hp);
494 void mlx5_core_hairpin_clear_dead_peer(struct mlx5_hairpin *hp)
498 mlx5_hairpin_unpair_peer_sq(hp);
501 for (i = 0; i < hp->num_channels; i++)
502 mlx5_core_destroy_sq(hp->peer_mdev, hp->sqn[i]);
504 hp->peer_gone = true;