From: Andrew Rybchenko Date: Thu, 7 Feb 2019 12:17:34 +0000 (+0000) Subject: net/sfc: move datapath RxQ handle to shared RxQ info X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=bfea01bc1e0ec561891b551c863b7999100377b0;p=dpdk.git net/sfc: move datapath RxQ handle to shared RxQ info If datapath supports multi-process, it should be possible to get its RxQ structure by the queue index. Signed-off-by: Andrew Rybchenko --- diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 7118d2293e..71be88f3e4 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -415,7 +415,7 @@ sfc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, if (rc != 0) goto fail_rx_qinit; - dev->data->rx_queues[rx_queue_id] = sa->rxq_info[rx_queue_id].rxq->dp; + dev->data->rx_queues[rx_queue_id] = sa->rxq_info[rx_queue_id].dp; sfc_adapter_unlock(sa); @@ -1123,16 +1123,14 @@ sfc_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); struct sfc_adapter *sa = dev->data->dev_private; struct sfc_rxq_info *rxq_info; - struct sfc_rxq *rxq; SFC_ASSERT(rx_queue_id < sa->rxq_count); rxq_info = &sa->rxq_info[rx_queue_id]; - rxq = rxq_info->rxq; - if (rxq == NULL || (rxq_info->state & SFC_RXQ_STARTED) == 0) + if ((rxq_info->state & SFC_RXQ_STARTED) == 0) return 0; - return sap->dp_rx->qdesc_npending(rxq->dp); + return sap->dp_rx->qdesc_npending(rxq_info->dp); } static int diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 130270dbad..886a7a2fde 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -590,7 +590,7 @@ sfc_rx_qflush(struct sfc_adapter *sa, unsigned int sw_index) sfc_notice(sa, "RxQ %u flushed", sw_index); } - sa->priv.dp_rx->qpurge(rxq->dp); + sa->priv.dp_rx->qpurge(rxq_info->dp); } static int @@ -704,7 +704,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) efx_rx_qenable(rxq->common); - rc = sa->priv.dp_rx->qstart(rxq->dp, evq->read_ptr); + rc = sa->priv.dp_rx->qstart(rxq_info->dp, evq->read_ptr); if (rc != 0) goto fail_dp_qstart; @@ -723,7 +723,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) return 0; fail_mac_filter_default_rxq_set: - sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr); fail_dp_qstart: sfc_rx_qflush(sa, sw_index); @@ -758,7 +758,7 @@ sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index) sa->eth_dev->data->rx_queue_state[sw_index] = RTE_ETH_QUEUE_STATE_STOPPED; - sa->priv.dp_rx->qstop(rxq->dp, &rxq->evq->read_ptr); + sa->priv.dp_rx->qstop(rxq_info->dp, &rxq->evq->read_ptr); if (sw_index == 0) efx_mac_filter_default_rxq_clear(sa->nic); @@ -1051,11 +1051,11 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index, rc = sa->priv.dp_rx->qcreate(sa->eth_dev->data->port_id, sw_index, &RTE_ETH_DEV_TO_PCI(sa->eth_dev)->addr, - socket_id, &info, &rxq->dp); + socket_id, &info, &rxq_info->dp); if (rc != 0) goto fail_dp_rx_qcreate; - evq->dp_rxq = rxq->dp; + evq->dp_rxq = rxq_info->dp; rxq_info->state = SFC_RXQ_INITIALIZED; @@ -1096,8 +1096,8 @@ sfc_rx_qfini(struct sfc_adapter *sa, unsigned int sw_index) rxq = rxq_info->rxq; SFC_ASSERT(rxq_info->state == SFC_RXQ_INITIALIZED); - sa->priv.dp_rx->qdestroy(rxq->dp); - rxq->dp = NULL; + sa->priv.dp_rx->qdestroy(rxq_info->dp); + rxq_info->dp = NULL; rxq_info->rxq = NULL; rxq_info->entries = 0; diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index be64004d0d..9c946d7cb4 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -59,7 +59,6 @@ struct sfc_rxq { efsys_mem_t mem; unsigned int hw_index; uint16_t buf_size; - struct sfc_dp_rxq *dp; }; static inline unsigned int @@ -124,6 +123,7 @@ struct sfc_rxq_info { efx_rxq_type_t type; unsigned int type_flags; struct sfc_rxq *rxq; + struct sfc_dp_rxq *dp; boolean_t deferred_start; boolean_t deferred_started; unsigned int refill_threshold;