mlx5: remove redundant debug message
[dpdk.git] / drivers / net / mlx5 / mlx5_rxmode.c
index b2ed17e..730527e 100644 (file)
@@ -88,6 +88,30 @@ static const struct special_flow_init special_flow_init[] = {
                        1 << HASH_RXQ_ETH |
                        0,
        },
+       [HASH_RXQ_FLOW_TYPE_BROADCAST] = {
+               .dst_mac_val = "\xff\xff\xff\xff\xff\xff",
+               .dst_mac_mask = "\xff\xff\xff\xff\xff\xff",
+               .hash_types =
+                       1 << HASH_RXQ_UDPV4 |
+                       1 << HASH_RXQ_IPV4 |
+#ifdef HAVE_FLOW_SPEC_IPV6
+                       1 << HASH_RXQ_UDPV6 |
+                       1 << HASH_RXQ_IPV6 |
+#endif /* HAVE_FLOW_SPEC_IPV6 */
+                       1 << HASH_RXQ_ETH |
+                       0,
+       },
+#ifdef HAVE_FLOW_SPEC_IPV6
+       [HASH_RXQ_FLOW_TYPE_IPV6MULTI] = {
+               .dst_mac_val = "\x33\x33\x00\x00\x00\x00",
+               .dst_mac_mask = "\xff\xff\x00\x00\x00\x00",
+               .hash_types =
+                       1 << HASH_RXQ_UDPV6 |
+                       1 << HASH_RXQ_IPV6 |
+                       1 << HASH_RXQ_ETH |
+                       0,
+       },
+#endif /* HAVE_FLOW_SPEC_IPV6 */
 };
 
 /**
@@ -105,8 +129,9 @@ static int
 hash_rxq_special_flow_enable(struct hash_rxq *hash_rxq,
                             enum hash_rxq_flow_type flow_type)
 {
+       struct priv *priv = hash_rxq->priv;
        struct ibv_exp_flow *flow;
-       FLOW_ATTR_SPEC_ETH(data, hash_rxq_flow_attr(hash_rxq, NULL, 0));
+       FLOW_ATTR_SPEC_ETH(data, priv_flow_attr(priv, NULL, 0, hash_rxq->type));
        struct ibv_exp_flow_attr *attr = &data->attr;
        struct ibv_exp_flow_spec_eth *spec = &data->spec;
        const uint8_t *mac;
@@ -124,7 +149,7 @@ hash_rxq_special_flow_enable(struct hash_rxq *hash_rxq,
         * This layout is expected by libibverbs.
         */
        assert(((uint8_t *)attr + sizeof(*attr)) == (uint8_t *)spec);
-       hash_rxq_flow_attr(hash_rxq, attr, sizeof(data));
+       priv_flow_attr(priv, attr, sizeof(data), hash_rxq->type);
        /* The first specification must be Ethernet. */
        assert(spec->type == IBV_EXP_FLOW_SPEC_ETH);
        assert(spec->size == sizeof(*spec));
@@ -179,8 +204,6 @@ hash_rxq_special_flow_disable(struct hash_rxq *hash_rxq,
 {
        if (hash_rxq->special_flow[flow_type] == NULL)
                return;
-       DEBUG("%p: disabling special flow %s (%d)",
-             (void *)hash_rxq, hash_rxq_flow_type_str(flow_type), flow_type);
        claim_zero(ibv_exp_destroy_flow(hash_rxq->special_flow[flow_type]));
        hash_rxq->special_flow[flow_type] = NULL;
        DEBUG("%p: special flow %s (%d) disabled",
@@ -242,6 +265,46 @@ priv_special_flow_disable(struct priv *priv, enum hash_rxq_flow_type flow_type)
        }
 }
 
+/**
+ * Enable all special flows in all hash RX queues.
+ *
+ * @param priv
+ *   Private structure.
+ */
+int
+priv_special_flow_enable_all(struct priv *priv)
+{
+       enum hash_rxq_flow_type flow_type;
+
+       for (flow_type = 0; flow_type != HASH_RXQ_FLOW_TYPE_MAC; ++flow_type) {
+               int ret;
+
+               ret = priv_special_flow_enable(priv, flow_type);
+               if (!ret)
+                       continue;
+               /* Failure, rollback. */
+               while (flow_type)
+                       priv_special_flow_disable(priv, --flow_type);
+               return ret;
+       }
+       return 0;
+}
+
+/**
+ * Disable all special flows in all hash RX queues.
+ *
+ * @param priv
+ *   Private structure.
+ */
+void
+priv_special_flow_disable_all(struct priv *priv)
+{
+       enum hash_rxq_flow_type flow_type;
+
+       for (flow_type = 0; flow_type != HASH_RXQ_FLOW_TYPE_MAC; ++flow_type)
+               priv_special_flow_disable(priv, flow_type);
+}
+
 /**
  * DPDK callback to enable promiscuous mode.
  *