Lines Matching refs:tc_psample

61 sampler_termtbl_create(struct mlx5e_tc_psample *tc_psample)
63 struct mlx5_eswitch *esw = tc_psample->esw;
87 tc_psample->termtbl = mlx5_create_auto_grouped_flow_table(root_ns, &ft_attr);
88 if (IS_ERR(tc_psample->termtbl)) {
89 err = PTR_ERR(tc_psample->termtbl);
97 tc_psample->termtbl_rule = mlx5_add_flow_rules(tc_psample->termtbl, NULL, &act, &dest, 1);
98 if (IS_ERR(tc_psample->termtbl_rule)) {
99 err = PTR_ERR(tc_psample->termtbl_rule);
101 mlx5_destroy_flow_table(tc_psample->termtbl);
109 sampler_termtbl_destroy(struct mlx5e_tc_psample *tc_psample)
111 mlx5_del_flow_rules(tc_psample->termtbl_rule);
112 mlx5_destroy_flow_table(tc_psample->termtbl);
173 sampler_get(struct mlx5e_tc_psample *tc_psample, u32 sample_ratio, u32 default_table_id)
179 mutex_lock(&tc_psample->ht_lock);
181 hash_for_each_possible(tc_psample->hashtbl, sampler, hlist, hash_key)
192 sampler->sample_table_id = tc_psample->termtbl->id;
196 err = sampler_obj_create(tc_psample->esw->dev, sampler);
200 hash_add(tc_psample->hashtbl, &sampler->hlist, hash_key);
204 mutex_unlock(&tc_psample->ht_lock);
210 mutex_unlock(&tc_psample->ht_lock);
215 sampler_put(struct mlx5e_tc_psample *tc_psample, struct mlx5e_sampler *sampler)
217 mutex_lock(&tc_psample->ht_lock);
220 sampler_obj_destroy(tc_psample->esw->dev, sampler->sampler_id);
223 mutex_unlock(&tc_psample->ht_lock);
262 sample_restore_get(struct mlx5e_tc_psample *tc_psample, u32 obj_id,
265 struct mlx5_eswitch *esw = tc_psample->esw;
271 mutex_lock(&tc_psample->restore_lock);
272 hash_for_each_possible(tc_psample->restore_hashtbl, restore, hlist, obj_id)
296 hash_add(tc_psample->restore_hashtbl, &restore->hlist, obj_id);
299 mutex_unlock(&tc_psample->restore_lock);
307 mutex_unlock(&tc_psample->restore_lock);
312 sample_restore_put(struct mlx5e_tc_psample *tc_psample, struct mlx5e_sample_restore *restore)
314 mutex_lock(&tc_psample->restore_lock);
317 mutex_unlock(&tc_psample->restore_lock);
321 mlx5_modify_header_dealloc(tc_psample->esw->dev, restore->modify_hdr);
469 mlx5e_tc_sample_offload(struct mlx5e_tc_psample *tc_psample,
485 if (IS_ERR_OR_NULL(tc_psample))
499 esw = tc_psample->esw;
503 ft = mlx5e_tc_post_act_get_ft(tc_psample->post_act);
512 sample_flow->sampler = sampler_get(tc_psample, sample_attr->rate, default_tbl_id);
532 sample_flow->restore = sample_restore_get(tc_psample, obj_id, mod_acts);
575 sample_restore_put(tc_psample, sample_flow->restore);
579 sampler_put(tc_psample, sample_flow->sampler);
589 mlx5e_tc_sample_unoffload(struct mlx5e_tc_psample *tc_psample,
596 if (IS_ERR_OR_NULL(tc_psample))
602 esw = tc_psample->esw;
606 sample_restore_put(tc_psample, sample_flow->restore);
608 sampler_put(tc_psample, sample_flow->sampler);
619 struct mlx5e_tc_psample *tc_psample;
622 tc_psample = kzalloc(sizeof(*tc_psample), GFP_KERNEL);
623 if (!tc_psample)
629 tc_psample->post_act = post_act;
630 tc_psample->esw = esw;
631 err = sampler_termtbl_create(tc_psample);
635 mutex_init(&tc_psample->ht_lock);
636 mutex_init(&tc_psample->restore_lock);
638 return tc_psample;
641 kfree(tc_psample);
646 mlx5e_tc_sample_cleanup(struct mlx5e_tc_psample *tc_psample)
648 if (IS_ERR_OR_NULL(tc_psample))
651 mutex_destroy(&tc_psample->restore_lock);
652 mutex_destroy(&tc_psample->ht_lock);
653 sampler_termtbl_destroy(tc_psample);
654 kfree(tc_psample);