net/sfc: fix adapter lock usage on rule creation
[dpdk.git] / drivers / net / sfc / sfc_flow.c
index 371648b..8d636f6 100644 (file)
@@ -11,7 +11,6 @@
 #include <rte_tailq.h>
 #include <rte_common.h>
 #include <rte_ethdev_driver.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ether.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
@@ -278,7 +277,7 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
        if (spec == NULL)
                return 0;
 
-       if (is_same_ether_addr(&mask->dst, &supp_mask.dst)) {
+       if (rte_is_same_ether_addr(&mask->dst, &supp_mask.dst)) {
                efx_spec->efs_match_flags |= is_ifrm ?
                        EFX_FILTER_MATCH_IFRM_LOC_MAC :
                        EFX_FILTER_MATCH_LOC_MAC;
@@ -286,7 +285,7 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
                           EFX_MAC_ADDR_LEN);
        } else if (memcmp(mask->dst.addr_bytes, ig_mask,
                          EFX_MAC_ADDR_LEN) == 0) {
-               if (is_unicast_ether_addr(&spec->dst))
+               if (rte_is_unicast_ether_addr(&spec->dst))
                        efx_spec->efs_match_flags |= is_ifrm ?
                                EFX_FILTER_MATCH_IFRM_UNKNOWN_UCAST_DST :
                                EFX_FILTER_MATCH_UNKNOWN_UCAST_DST;
@@ -294,7 +293,7 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
                        efx_spec->efs_match_flags |= is_ifrm ?
                                EFX_FILTER_MATCH_IFRM_UNKNOWN_MCAST_DST :
                                EFX_FILTER_MATCH_UNKNOWN_MCAST_DST;
-       } else if (!is_zero_ether_addr(&mask->dst)) {
+       } else if (!rte_is_zero_ether_addr(&mask->dst)) {
                goto fail_bad_mask;
        }
 
@@ -303,11 +302,11 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
         * ethertype masks are equal to zero in inner frame,
         * so these fields are filled in only for the outer frame
         */
-       if (is_same_ether_addr(&mask->src, &supp_mask.src)) {
+       if (rte_is_same_ether_addr(&mask->src, &supp_mask.src)) {
                efx_spec->efs_match_flags |= EFX_FILTER_MATCH_REM_MAC;
                rte_memcpy(efx_spec->efs_rem_mac, spec->src.addr_bytes,
                           EFX_MAC_ADDR_LEN);
-       } else if (!is_zero_ether_addr(&mask->src)) {
+       } else if (!rte_is_zero_ether_addr(&mask->src)) {
                goto fail_bad_mask;
        }
 
@@ -952,7 +951,7 @@ sfc_flow_parse_geneve(const struct rte_flow_item *item,
                return 0;
 
        if (mask->protocol == supp_mask.protocol) {
-               if (spec->protocol != rte_cpu_to_be_16(ETHER_TYPE_TEB)) {
+               if (spec->protocol != rte_cpu_to_be_16(RTE_ETHER_TYPE_TEB)) {
                        rte_flow_error_set(error, EINVAL,
                                RTE_FLOW_ERROR_TYPE_ITEM, item,
                                "GENEVE encap. protocol must be Ethernet "
@@ -1241,10 +1240,10 @@ sfc_flow_parse_queue(struct sfc_adapter *sa,
 {
        struct sfc_rxq *rxq;
 
-       if (queue->index >= sa->rxq_count)
+       if (queue->index >= sfc_sa2shared(sa)->rxq_count)
                return -EINVAL;
 
-       rxq = sa->rxq_info[queue->index].rxq;
+       rxq = &sa->rxq_ctrl[queue->index];
        flow->spec.template.efs_dmaq_id = (uint16_t)rxq->hw_index;
 
        return 0;
@@ -1255,7 +1254,8 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,
                   const struct rte_flow_action_rss *action_rss,
                   struct rte_flow *flow)
 {
-       struct sfc_rss *rss = &sa->rss;
+       struct sfc_adapter_shared * const sas = sfc_sa2shared(sa);
+       struct sfc_rss *rss = &sas->rss;
        unsigned int rxq_sw_index;
        struct sfc_rxq *rxq;
        unsigned int rxq_hw_index_min;
@@ -1268,18 +1268,18 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,
        if (action_rss->queue_num == 0)
                return -EINVAL;
 
-       rxq_sw_index = sa->rxq_count - 1;
-       rxq = sa->rxq_info[rxq_sw_index].rxq;
+       rxq_sw_index = sfc_sa2shared(sa)->rxq_count - 1;
+       rxq = &sa->rxq_ctrl[rxq_sw_index];
        rxq_hw_index_min = rxq->hw_index;
        rxq_hw_index_max = 0;
 
        for (i = 0; i < action_rss->queue_num; ++i) {
                rxq_sw_index = action_rss->queue[i];
 
-               if (rxq_sw_index >= sa->rxq_count)
+               if (rxq_sw_index >= sfc_sa2shared(sa)->rxq_count)
                        return -EINVAL;
 
-               rxq = sa->rxq_info[rxq_sw_index].rxq;
+               rxq = &sa->rxq_ctrl[rxq_sw_index];
 
                if (rxq->hw_index < rxq_hw_index_min)
                        rxq_hw_index_min = rxq->hw_index;
@@ -1344,7 +1344,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa,
        for (i = 0; i < RTE_DIM(sfc_rss_conf->rss_tbl); ++i) {
                unsigned int nb_queues = action_rss->queue_num;
                unsigned int rxq_sw_index = action_rss->queue[i % nb_queues];
-               struct sfc_rxq *rxq = sa->rxq_info[rxq_sw_index].rxq;
+               struct sfc_rxq *rxq = &sa->rxq_ctrl[rxq_sw_index];
 
                sfc_rss_conf->rss_tbl[i] = rxq->hw_index - rxq_hw_index_min;
        }
@@ -1400,7 +1400,8 @@ static int
 sfc_flow_filter_insert(struct sfc_adapter *sa,
                       struct rte_flow *flow)
 {
-       struct sfc_rss *rss = &sa->rss;
+       struct sfc_adapter_shared * const sas = sfc_sa2shared(sa);
+       struct sfc_rss *rss = &sas->rss;
        struct sfc_flow_rss *flow_rss = &flow->rss_conf;
        uint32_t efs_rss_context = EFX_RSS_CONTEXT_DEFAULT;
        unsigned int i;
@@ -1527,7 +1528,7 @@ sfc_flow_parse_actions(struct sfc_adapter *sa,
                       struct rte_flow_error *error)
 {
        int rc;
-       const unsigned int dp_rx_features = sa->dp_rx->features;
+       const unsigned int dp_rx_features = sa->priv.dp_rx->features;
        uint32_t actions_set = 0;
        const uint32_t fate_actions_mask = (1UL << RTE_FLOW_ACTION_TYPE_QUEUE) |
                                           (1UL << RTE_FLOW_ACTION_TYPE_RSS) |
@@ -2252,7 +2253,7 @@ sfc_flow_parse(struct rte_eth_dev *dev,
               struct rte_flow *flow,
               struct rte_flow_error *error)
 {
-       struct sfc_adapter *sa = dev->data->dev_private;
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
        int rc;
 
        rc = sfc_flow_parse_attr(attr, flow, error);
@@ -2298,7 +2299,7 @@ sfc_flow_create(struct rte_eth_dev *dev,
                const struct rte_flow_action actions[],
                struct rte_flow_error *error)
 {
-       struct sfc_adapter *sa = dev->data->dev_private;
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
        struct rte_flow *flow = NULL;
        int rc;
 
@@ -2314,10 +2315,10 @@ sfc_flow_create(struct rte_eth_dev *dev,
        if (rc != 0)
                goto fail_bad_value;
 
-       TAILQ_INSERT_TAIL(&sa->filter.flow_list, flow, entries);
-
        sfc_adapter_lock(sa);
 
+       TAILQ_INSERT_TAIL(&sa->filter.flow_list, flow, entries);
+
        if (sa->state == SFC_ADAPTER_STARTED) {
                rc = sfc_flow_filter_insert(sa, flow);
                if (rc != 0) {
@@ -2371,7 +2372,7 @@ sfc_flow_destroy(struct rte_eth_dev *dev,
                 struct rte_flow *flow,
                 struct rte_flow_error *error)
 {
-       struct sfc_adapter *sa = dev->data->dev_private;
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
        struct rte_flow *flow_ptr;
        int rc = EINVAL;
 
@@ -2400,7 +2401,7 @@ static int
 sfc_flow_flush(struct rte_eth_dev *dev,
               struct rte_flow_error *error)
 {
-       struct sfc_adapter *sa = dev->data->dev_private;
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
        struct rte_flow *flow;
        int rc = 0;
        int ret = 0;
@@ -2422,8 +2423,7 @@ static int
 sfc_flow_isolate(struct rte_eth_dev *dev, int enable,
                 struct rte_flow_error *error)
 {
-       struct sfc_adapter *sa = dev->data->dev_private;
-       struct sfc_port *port = &sa->port;
+       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
        int ret = 0;
 
        sfc_adapter_lock(sa);
@@ -2433,7 +2433,7 @@ sfc_flow_isolate(struct rte_eth_dev *dev, int enable,
                                   NULL, "please close the port first");
                ret = -rte_errno;
        } else {
-               port->isolated = (enable) ? B_TRUE : B_FALSE;
+               sfc_sa2shared(sa)->isolated = (enable) ? B_TRUE : B_FALSE;
        }
        sfc_adapter_unlock(sa);