[PATCH v7 8/8] net/gve: add support for Rx/Tx

Ferruh Yigit ferruh.yigit at amd.com
Fri Oct 21 11:52:04 CEST 2022


On 10/21/2022 10:19 AM, Junfeng Guo wrote:

> 
> Add Rx/Tx of GQI_QPL queue format and GQI_RDA queue format.
> 
> Signed-off-by: Xiaoyun Li <xiaoyun.li at intel.com>
> Signed-off-by: Junfeng Guo <junfeng.guo at intel.com>

<...>

> +
> +static inline void
> +gve_tx_clean_swr_qpl(struct gve_tx_queue *txq)
> +{
> +       uint32_t start = txq->sw_ntc;
> +       uint32_t ntc, nb_clean;
> +
> +       ntc = txq->sw_tail;
> +
> +       if (ntc == start)
> +               return;
> +
> +       /* if wrap around, free twice. */
> +       if (ntc < start) {
> +               nb_clean = txq->nb_tx_desc - start;
> +               if (nb_clean > GVE_TX_MAX_FREE_SZ)
> +                       nb_clean = GVE_TX_MAX_FREE_SZ;
> +               gve_free_bulk_mbuf(&txq->sw_ring[start], nb_clean);
> +
> +               txq->sw_nb_free += nb_clean;
> +               start += nb_clean;
> +               if (start == txq->nb_tx_desc)
> +                       start = 0;
> +               txq->sw_ntc = start;
> +       }
> +
> +       if (ntc > start) {
> +               nb_clean = ntc - start;
> +               if (nb_clean > GVE_TX_MAX_FREE_SZ)
> +                       nb_clean = GVE_TX_MAX_FREE_SZ;
> +               gve_free_bulk_mbuf(&txq->sw_ring[start], nb_clean);
> +               txq->sw_nb_free += nb_clean;
> +               start += nb_clean;
> +               txq->sw_ntc = start;
> +       }
> +}

[copy/paste from previous version]

may be can drop the 'if' block, since "ntc == start" and "ntc < start" 
cases already covered.

<...>

> +uint16_t
> +gve_tx_burst(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
> +{
> +       struct gve_tx_queue *txq = tx_queue;
> +
> +       if (txq->is_gqi_qpl)
> +               return gve_tx_burst_qpl(tx_queue, tx_pkts, nb_pkts);
> +
> +       return gve_tx_burst_ra(tx_queue, tx_pkts, nb_pkts);
> +}
> +

[copy/paste from previous version]

Can there be mix of queue types?
If only one queue type is supported in specific config, perhaps burst 
function can be set during configuration, to prevent if check on datapath.

This is optimization and can be done later, it doesn't have to be in the 
set.



More information about the dev mailing list