diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index fff5534..0527223 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -8602,8 +8602,6 @@ struct mlx5_hlist_entry *
  *
  * @param[in, out] dev
  *   Pointer to rte_eth_dev structure.
- * @param[in] attr
- *   Attributes of flow that includes this item.
  * @param[in] resource
  *   Pointer to sample resource.
  * @parm[in, out] dev_flow
@@ -8618,7 +8616,6 @@ struct mlx5_hlist_entry *
  */
 static int
 flow_dv_sample_resource_register(struct rte_eth_dev *dev,
-			 const struct rte_flow_attr *attr,
 			 struct mlx5_flow_dv_sample_resource *resource,
 			 struct mlx5_flow *dev_flow,
 			 void **sample_dv_actions,
@@ -8632,6 +8629,8 @@ struct mlx5_hlist_entry *
 	uint32_t idx = 0;
 	const uint32_t next_ft_step = 1;
 	uint32_t next_ft_id = resource->ft_id +	next_ft_step;
+	uint8_t is_egress = 0;
+	uint8_t is_transfer = 0;
 
 	/* Lookup a matching resource from cache. */
 	ILIST_FOREACH(sh->ipool[MLX5_IPOOL_SAMPLE], sh->sample_action_list,
@@ -8664,8 +8663,12 @@ struct mlx5_hlist_entry *
 					  "cannot allocate resource memory");
 	*cache_resource = *resource;
 	/* Create normal path table level */
+	if (resource->ft_type == MLX5DV_FLOW_TABLE_TYPE_FDB)
+		is_transfer = 1;
+	else if (resource->ft_type == MLX5DV_FLOW_TABLE_TYPE_NIC_TX)
+		is_egress = 1;
 	tbl = flow_dv_tbl_resource_get(dev, next_ft_id,
-					attr->egress, attr->transfer,
+					is_egress, is_transfer,
 					dev_flow->external, NULL, 0, 0, error);
 	if (!tbl) {
 		rte_flow_error_set(error, ENOMEM,
@@ -8748,8 +8751,6 @@ struct mlx5_hlist_entry *
  *
  * @param[in, out] dev
  *   Pointer to rte_eth_dev structure.
- * @param[in] attr
- *   Attributes of flow that includes this item.
  * @param[in] resource
  *   Pointer to destination array resource.
  * @parm[in, out] dev_flow
@@ -8762,7 +8763,6 @@ struct mlx5_hlist_entry *
  */
 static int
 flow_dv_dest_array_resource_register(struct rte_eth_dev *dev,
-			 const struct rte_flow_attr *attr,
 			 struct mlx5_flow_dv_dest_array_resource *resource,
 			 struct mlx5_flow *dev_flow,
 			 struct rte_flow_error *error)
@@ -8806,9 +8806,9 @@ struct mlx5_hlist_entry *
 					  NULL,
 					  "cannot allocate resource memory");
 	*cache_resource = *resource;
-	if (attr->transfer)
+	if (resource->ft_type == MLX5DV_FLOW_TABLE_TYPE_FDB)
 		domain = sh->fdb_domain;
-	else if (attr->ingress)
+	else if (resource->ft_type == MLX5DV_FLOW_TABLE_TYPE_NIC_RX)
 		domain = sh->rx_domain;
 	else
 		domain = sh->tx_domain;
@@ -9097,6 +9097,8 @@ struct mlx5_hlist_entry *
 		res->set_action = action_ctx.set_action;
 	} else if (attr->ingress) {
 		res->ft_type = MLX5DV_FLOW_TABLE_TYPE_NIC_RX;
+	} else {
+		res->ft_type = MLX5DV_FLOW_TABLE_TYPE_NIC_TX;
 	}
 	return 0;
 }
@@ -9108,8 +9110,6 @@ struct mlx5_hlist_entry *
  *   Pointer to rte_eth_dev structure.
  * @param[in, out] dev_flow
  *   Pointer to the mlx5_flow.
- * @param[in] attr
- *   Pointer to the flow attributes.
  * @param[in] num_of_dest
  *   The num of destination.
  * @param[in, out] res
@@ -9129,7 +9129,6 @@ struct mlx5_hlist_entry *
 static int
 flow_dv_create_action_sample(struct rte_eth_dev *dev,
 			     struct mlx5_flow *dev_flow,
-			     const struct rte_flow_attr *attr,
 			     uint32_t num_of_dest,
 			     struct mlx5_flow_dv_sample_resource *res,
 			     struct mlx5_flow_dv_dest_array_resource *mdest_res,
@@ -9189,14 +9188,14 @@ struct mlx5_hlist_entry *
 		memcpy(&mdest_res->sample_act[0], &res->sample_act,
 				sizeof(struct mlx5_flow_sub_actions_list));
 		mdest_res->num_of_dest = num_of_dest;
-		if (flow_dv_dest_array_resource_register(dev, attr, mdest_res,
+		if (flow_dv_dest_array_resource_register(dev, mdest_res,
 							 dev_flow, error))
 			return rte_flow_error_set(error, EINVAL,
 						  RTE_FLOW_ERROR_TYPE_ACTION,
 						  NULL, "can't create sample "
 						  "action");
 	} else {
-		if (flow_dv_sample_resource_register(dev, attr, res, dev_flow,
+		if (flow_dv_sample_resource_register(dev, res, dev_flow,
 						     sample_actions, error))
 			return rte_flow_error_set(error, EINVAL,
 						  RTE_FLOW_ERROR_TYPE_ACTION,
@@ -9836,7 +9835,7 @@ struct mlx5_hlist_entry *
 			}
 			if (action_flags & MLX5_FLOW_ACTION_SAMPLE) {
 				ret = flow_dv_create_action_sample(dev,
-							  dev_flow, attr,
+							  dev_flow,
 							  num_of_dest,
 							  &sample_res,
 							  &mdest_res,
