Lines Matching defs:hp

597 	struct mlx5e_hairpin *hp;
721 static int mlx5e_hairpin_create_transport(struct mlx5e_hairpin *hp)
730 err = mlx5_core_alloc_transport_domain(hp->func_mdev, &hp->tdn);
734 mlx5e_tir_builder_build_inline(builder, hp->tdn, hp->pair->rqn[0]);
735 err = mlx5e_tir_init(&hp->direct_tir, builder, hp->func_mdev, false);
744 mlx5_core_dealloc_transport_domain(hp->func_mdev, hp->tdn);
749 static void mlx5e_hairpin_destroy_transport(struct mlx5e_hairpin *hp)
751 mlx5e_tir_destroy(&hp->direct_tir);
752 mlx5_core_dealloc_transport_domain(hp->func_mdev, hp->tdn);
755 static int mlx5e_hairpin_create_indirect_rqt(struct mlx5e_hairpin *hp)
757 struct mlx5e_priv *priv = hp->func_priv;
763 mlx5e_rqt_size(mdev, hp->num_channels),
764 mlx5e_rqt_size(mdev, hp->num_channels));
768 mlx5e_rss_params_indir_init_uniform(&indir, hp->num_channels);
769 err = mlx5e_rqt_init_indir(&hp->indir_rqt, mdev, hp->pair->rqn, NULL, hp->num_channels,
777 static int mlx5e_hairpin_create_indirect_tirs(struct mlx5e_hairpin *hp)
779 struct mlx5e_priv *priv = hp->func_priv;
796 mlx5e_tir_builder_build_rqt(builder, hp->tdn,
797 mlx5e_rqt_get_rqtn(&hp->indir_rqt),
801 err = mlx5e_tir_init(&hp->indir_tir[tt], builder, hp->func_mdev, false);
803 mlx5_core_warn(hp->func_mdev, "create indirect tirs failed, %d\n", err);
817 mlx5e_tir_destroy(&hp->indir_tir[tt]);
822 static void mlx5e_hairpin_destroy_indirect_tirs(struct mlx5e_hairpin *hp)
827 mlx5e_tir_destroy(&hp->indir_tir[tt]);
830 static void mlx5e_hairpin_set_ttc_params(struct mlx5e_hairpin *hp,
843 mlx5e_tir_get_tirn(&hp->direct_tir) :
844 mlx5e_tir_get_tirn(&hp->indir_tir[tt]);
851 static int mlx5e_hairpin_rss_init(struct mlx5e_hairpin *hp)
853 struct mlx5e_priv *priv = hp->func_priv;
858 err = mlx5e_hairpin_create_indirect_rqt(hp);
862 err = mlx5e_hairpin_create_indirect_tirs(hp);
866 mlx5e_hairpin_set_ttc_params(hp, &ttc_params);
867 hp->ttc = mlx5_create_ttc_table(priv->mdev, &ttc_params);
868 if (IS_ERR(hp->ttc)) {
869 err = PTR_ERR(hp->ttc);
875 hp->num_channels,
881 mlx5e_hairpin_destroy_indirect_tirs(hp);
883 mlx5e_rqt_destroy(&hp->indir_rqt);
888 static void mlx5e_hairpin_rss_cleanup(struct mlx5e_hairpin *hp)
890 mlx5_destroy_ttc_table(hp->ttc);
891 mlx5e_hairpin_destroy_indirect_tirs(hp);
892 mlx5e_rqt_destroy(&hp->indir_rqt);
900 struct mlx5e_hairpin *hp;
904 hp = kzalloc(sizeof(*hp), GFP_KERNEL);
905 if (!hp)
920 hp->pair = pair;
921 hp->func_mdev = func_mdev;
922 hp->func_priv = priv;
923 hp->num_channels = params->num_channels;
924 hp->log_num_packets = params->log_num_packets;
926 err = mlx5e_hairpin_create_transport(hp);
930 if (hp->num_channels > 1) {
931 err = mlx5e_hairpin_rss_init(hp);
936 return hp;
939 mlx5e_hairpin_destroy_transport(hp);
941 mlx5_core_hairpin_destroy(hp->pair);
943 kfree(hp);
947 static void mlx5e_hairpin_destroy(struct mlx5e_hairpin *hp)
949 if (hp->num_channels > 1)
950 mlx5e_hairpin_rss_cleanup(hp);
951 mlx5e_hairpin_destroy_transport(hp);
952 mlx5_core_hairpin_destroy(hp->pair);
953 kvfree(hp);
989 if (!IS_ERR_OR_NULL(hpe->hp)) {
991 dev_name(hpe->hp->pair->peer_mdev->device));
993 mlx5e_hairpin_destroy(hpe->hp);
1069 refcount_read(&hpe->refcnt), hpe->hp->num_channels,
1070 BIT(hpe->hp->log_num_packets));
1103 struct mlx5e_hairpin *hp;
1131 if (IS_ERR(hpe->hp)) {
1181 hp = mlx5e_hairpin_create(priv, &params, peer_ifindex);
1182 hpe->hp = hp;
1184 if (IS_ERR(hp)) {
1185 err = PTR_ERR(hp);
1190 mlx5e_tir_get_tirn(&hp->direct_tir), hp->pair->rqn[0],
1191 dev_name(hp->pair->peer_mdev->device),
1192 hp->pair->sqn[0], match_prio, params.log_data_size, params.log_num_packets);
1195 if (hpe->hp->num_channels > 1) {
1198 mlx5_get_ttc_flow_table(hpe->hp->ttc);
1200 flow->attr->nic_attr->hairpin_tirn = mlx5e_tir_get_tirn(&hpe->hp->direct_tir);
5054 if (!IS_ERR_OR_NULL(hpe->hp) && hpe->peer_vhca_id == peer_vhca_id)
5055 mlx5_core_hairpin_clear_dead_peer(hpe->hp->pair);