net/mlx5: fix metadata item validation for ingress flows
[dpdk.git] / drivers / net / hns3 / hns3_flow.c
index a601124..a016857 100644 (file)
@@ -44,8 +44,7 @@ static enum rte_flow_item_type first_items[] = {
        RTE_FLOW_ITEM_TYPE_NVGRE,
        RTE_FLOW_ITEM_TYPE_VXLAN,
        RTE_FLOW_ITEM_TYPE_GENEVE,
-       RTE_FLOW_ITEM_TYPE_VXLAN_GPE,
-       RTE_FLOW_ITEM_TYPE_MPLS
+       RTE_FLOW_ITEM_TYPE_VXLAN_GPE
 };
 
 static enum rte_flow_item_type L2_next_items[] = {
@@ -65,8 +64,7 @@ static enum rte_flow_item_type L3_next_items[] = {
 static enum rte_flow_item_type L4_next_items[] = {
        RTE_FLOW_ITEM_TYPE_VXLAN,
        RTE_FLOW_ITEM_TYPE_GENEVE,
-       RTE_FLOW_ITEM_TYPE_VXLAN_GPE,
-       RTE_FLOW_ITEM_TYPE_MPLS
+       RTE_FLOW_ITEM_TYPE_VXLAN_GPE
 };
 
 static enum rte_flow_item_type tunnel_next_items[] = {
@@ -1118,8 +1116,7 @@ is_tunnel_packet(enum rte_flow_item_type type)
        if (type == RTE_FLOW_ITEM_TYPE_VXLAN_GPE ||
            type == RTE_FLOW_ITEM_TYPE_VXLAN ||
            type == RTE_FLOW_ITEM_TYPE_NVGRE ||
-           type == RTE_FLOW_ITEM_TYPE_GENEVE ||
-           type == RTE_FLOW_ITEM_TYPE_MPLS)
+           type == RTE_FLOW_ITEM_TYPE_GENEVE)
                return true;
        return false;
 }
@@ -1809,17 +1806,18 @@ hns3_flow_create(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
 
                flow->counter_id = fdir_rule.act_cnt.id;
        }
+
+       fdir_rule_ptr = rte_zmalloc("hns3 fdir rule",
+                                   sizeof(struct hns3_fdir_rule_ele),
+                                   0);
+       if (fdir_rule_ptr == NULL) {
+               hns3_err(hw, "failed to allocate fdir_rule memory.");
+               ret = -ENOMEM;
+               goto err_fdir;
+       }
+
        ret = hns3_fdir_filter_program(hns, &fdir_rule, false);
        if (!ret) {
-               fdir_rule_ptr = rte_zmalloc("hns3 fdir rule",
-                                           sizeof(struct hns3_fdir_rule_ele),
-                                           0);
-               if (fdir_rule_ptr == NULL) {
-                       hns3_err(hw, "Failed to allocate fdir_rule memory");
-                       ret = -ENOMEM;
-                       goto err_fdir;
-               }
-
                memcpy(&fdir_rule_ptr->fdir_conf, &fdir_rule,
                        sizeof(struct hns3_fdir_rule));
                TAILQ_INSERT_TAIL(&process_list->fdir_list,
@@ -1830,10 +1828,10 @@ hns3_flow_create(struct rte_eth_dev *dev, const struct rte_flow_attr *attr,
                return flow;
        }
 
+       rte_free(fdir_rule_ptr);
 err_fdir:
        if (fdir_rule.flags & HNS3_RULE_FLAG_COUNTER)
                hns3_counter_release(dev, fdir_rule.act_cnt.id);
-
 err:
        rte_flow_error_set(error, -ret, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
                           "Failed to create flow");