net/sfc: remove EvQ info array to simplify reconfigure
[dpdk.git] / drivers / net / sfc / sfc_rx.c
index eef4ce0..d8cd228 100644 (file)
@@ -282,8 +282,7 @@ sfc_efx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 
                if (scatter_pkt != NULL) {
                        if (rte_pktmbuf_chain(scatter_pkt, m) != 0) {
-                               rte_mempool_put(rxq->refill_mb_pool,
-                                               scatter_pkt);
+                               rte_pktmbuf_free(scatter_pkt);
                                goto discard;
                        }
                        /* The packet to deliver */
@@ -643,7 +642,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)
 
        evq = rxq->evq;
 
-       rc = sfc_ev_qstart(sa, evq->evq_index);
+       rc = sfc_ev_qstart(evq, sfc_evq_index_by_rxq_sw_index(sa, sw_index));
        if (rc != 0)
                goto fail_ev_qstart;
 
@@ -681,7 +680,7 @@ fail_dp_qstart:
        sfc_rx_qflush(sa, sw_index);
 
 fail_rx_qcreate:
-       sfc_ev_qstop(sa, evq->evq_index);
+       sfc_ev_qstop(evq);
 
 fail_ev_qstart:
        return rc;
@@ -719,7 +718,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index)
 
        efx_rx_qdestroy(rxq->common);
 
-       sfc_ev_qstop(sa, rxq->evq->evq_index);
+       sfc_ev_qstop(rxq->evq);
 }
 
 static int
@@ -862,7 +861,6 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
        int rc;
        uint16_t buf_size;
        struct sfc_rxq_info *rxq_info;
-       unsigned int evq_index;
        struct sfc_evq *evq;
        struct sfc_rxq *rxq;
        struct sfc_dp_rx_qcreate_info info;
@@ -900,14 +898,11 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
                sa->eth_dev->data->dev_conf.rxmode.enable_scatter ?
                EFX_RXQ_TYPE_SCATTER : EFX_RXQ_TYPE_DEFAULT;
 
-       evq_index = sfc_evq_index_by_rxq_sw_index(sa, sw_index);
-
-       rc = sfc_ev_qinit(sa, evq_index, rxq_info->entries, socket_id);
+       rc = sfc_ev_qinit(sa, SFC_EVQ_TYPE_RX, sw_index,
+                         rxq_info->entries, socket_id, &evq);
        if (rc != 0)
                goto fail_ev_qinit;
 
-       evq = sa->evq_info[evq_index].evq;
-
        rc = ENOMEM;
        rxq = rte_zmalloc_socket("sfc-rxq", sizeof(*rxq), RTE_CACHE_LINE_SIZE,
                                 socket_id);
@@ -968,7 +963,7 @@ fail_dma_alloc:
        rte_free(rxq);
 
 fail_rxq_alloc:
-       sfc_ev_qfini(sa, evq_index);
+       sfc_ev_qfini(evq);
 
 fail_ev_qinit:
        rxq_info->entries = 0;
@@ -998,6 +993,10 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index)
        rxq_info->entries = 0;
 
        sfc_dma_free(sa, &rxq->mem);
+
+       sfc_ev_qfini(rxq->evq);
+       rxq->evq = NULL;
+
        rte_free(rxq);
 }