net/iavf: enable interrupt polling
[dpdk.git] / drivers / net / ixgbe / ixgbe_flow.c
index dff04c4..511b612 100644 (file)
@@ -25,7 +25,7 @@
 #include <rte_eal.h>
 #include <rte_alarm.h>
 #include <rte_ether.h>
-#include <rte_ethdev_driver.h>
+#include <ethdev_driver.h>
 #include <rte_malloc.h>
 #include <rte_random.h>
 #include <rte_dev.h>
@@ -870,15 +870,6 @@ ixgbe_parse_ethertype_filter(struct rte_eth_dev *dev,
        if (ret)
                return ret;
 
-       /* Ixgbe doesn't support MAC address. */
-       if (filter->flags & RTE_ETHTYPE_FLAGS_MAC) {
-               memset(filter, 0, sizeof(struct rte_eth_ethertype_filter));
-               rte_flow_error_set(error, EINVAL,
-                       RTE_FLOW_ERROR_TYPE_ITEM,
-                       NULL, "Not supported by ethertype filter");
-               return -rte_errno;
-       }
-
        if (filter->queue >= dev->data->nb_rx_queues) {
                memset(filter, 0, sizeof(struct rte_eth_ethertype_filter));
                rte_flow_error_set(error, EINVAL,
@@ -3146,13 +3137,13 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
                                rte_memcpy(&fdir_info->mask,
                                        &fdir_rule.mask,
                                        sizeof(struct ixgbe_hw_fdir_mask));
-                               fdir_info->flex_bytes_offset =
-                                       fdir_rule.flex_bytes_offset;
 
-                               if (fdir_rule.mask.flex_bytes_mask)
-                                       ixgbe_fdir_set_flexbytes_offset(dev,
+                               if (fdir_rule.mask.flex_bytes_mask) {
+                                       ret = ixgbe_fdir_set_flexbytes_offset(dev,
                                                fdir_rule.flex_bytes_offset);
-
+                                       if (ret)
+                                               goto out;
+                               }
                                ret = ixgbe_fdir_set_input_mask(dev);
                                if (ret)
                                        goto out;
@@ -3170,8 +3161,9 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
                                if (ret)
                                        goto out;
 
-                               if (fdir_info->flex_bytes_offset !=
-                                               fdir_rule.flex_bytes_offset)
+                               if (fdir_rule.mask.flex_bytes_mask &&
+                                   fdir_info->flex_bytes_offset !=
+                                   fdir_rule.flex_bytes_offset)
                                        goto out;
                        }
                }
@@ -3445,6 +3437,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
                        TAILQ_REMOVE(&ixgbe_flow_list,
                                ixgbe_flow_mem_ptr, entries);
                        rte_free(ixgbe_flow_mem_ptr);
+                       break;
                }
        }
        rte_free(flow);