On Fri, May 30, 2025 at 02:57:11PM +0100, Anatoly Burakov wrote:
> In preparation for deduplication effort, generalize the Rx queue structure.
> 
> The entire Rx queue structure is moved to common/rx.h, clarifying the
> comments where necessary, and separating common parts from ixgbe-specific
> parts.
> 
> Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com>
> ---
Acked-by: Bruce Richardson <bruce.richard...@intel.com>

One minor nit inline below.
> 
> Notes:
>     v3 -> v4:
>     - Separate out some of the changes from this commit into previous commits
>     - Rename CI_RX_BURST to CI_RX_MAX_BURST to match the driver naming 
> convention
> 
>  drivers/net/intel/common/rx.h                 |  67 ++++++++++-
>  drivers/net/intel/ixgbe/ixgbe_ethdev.c        |   8 +-
>  .../ixgbe/ixgbe_recycle_mbufs_vec_common.c    |   6 +-
>  drivers/net/intel/ixgbe/ixgbe_rxtx.c          | 110 +++++++++---------
>  drivers/net/intel/ixgbe/ixgbe_rxtx.h          |  65 +----------
>  .../net/intel/ixgbe/ixgbe_rxtx_vec_common.h   |   4 +-
>  drivers/net/intel/ixgbe/ixgbe_rxtx_vec_neon.c |  18 +--
>  drivers/net/intel/ixgbe/ixgbe_rxtx_vec_sse.c  |  18 +--
>  8 files changed, 150 insertions(+), 146 deletions(-)
> 
> diff --git a/drivers/net/intel/common/rx.h b/drivers/net/intel/common/rx.h
> index abb01ba5e7..80a9f21303 100644
> --- a/drivers/net/intel/common/rx.h
> +++ b/drivers/net/intel/common/rx.h
> @@ -10,14 +10,75 @@
>  #include <rte_mbuf.h>
>  #include <rte_ethdev.h>
>  
> -#define CI_RX_BURST 32
> +#define CI_RX_MAX_BURST 32
> +
> +struct ci_rx_queue;
> +
> +struct ci_rx_entry {
> +     struct rte_mbuf *mbuf; /* mbuf associated with RX descriptor. */
> +};
> +
> +struct ci_rx_entry_sc {
> +     struct rte_mbuf *fbuf; /* First segment of the fragmented packet.*/
> +};
> +
> +/**
> + * Structure associated with each RX queue.
> + */
> +struct ci_rx_queue {
> +     struct rte_mempool  *mp; /**< mbuf pool to populate RX ring. */
> +     union { /* RX ring virtual address */
> +             volatile union ixgbe_adv_rx_desc *ixgbe_rx_ring;
> +     };
> +     volatile uint8_t *qrx_tail;   /**< register address of tail */
> +     struct ci_rx_entry *sw_ring; /**< address of RX software ring. */
> +     struct ci_rx_entry_sc *sw_sc_ring; /**< address of scattered Rx 
> software ring. */
> +     rte_iova_t rx_ring_phys_addr; /**< RX ring DMA address. */
> +     struct rte_mbuf *pkt_first_seg; /**< First segment of current packet. */
> +     struct rte_mbuf *pkt_last_seg; /**< Last segment of current packet. */
> +     /** hold packets to return to application */
> +     struct rte_mbuf *rx_stage[CI_RX_MAX_BURST * 2];
> +     uint16_t nb_rx_desc; /**< number of RX descriptors. */
> +     uint16_t rx_tail;  /**< current value of tail register. */
> +     uint16_t rx_nb_avail; /**< nr of staged pkts ready to ret to app */
> +     uint16_t nb_rx_hold; /**< number of held free RX desc. */
> +     uint16_t rx_next_avail; /**< idx of next staged pkt to ret to app */
> +     uint16_t rx_free_thresh; /**< max free RX desc to hold. */
> +     uint16_t rx_free_trigger; /**< triggers rx buffer allocation */
> +     uint16_t rxrearm_nb;     /**< number of remaining to be re-armed */
> +     uint16_t rxrearm_start;  /**< the idx we start the re-arming from */
> +     uint16_t queue_id; /**< RX queue index. */
> +     uint16_t port_id;  /**< Device port identifier. */
> +     uint16_t reg_idx;  /**< RX queue register index. */
> +     uint8_t crc_len;  /**< 0 if CRC stripped, 4 otherwise. */
> +     bool rx_deferred_start; /**< queue is not started on dev start. */
> +     bool vector_rx; /**< indicates that vector RX is in use */
> +     bool drop_en;  /**< if 1, drop packets if no descriptors are available. 
> */
> +     uint64_t mbuf_initializer; /**< value to init mbufs */
> +     uint64_t offloads; /**< Rx offloads with RTE_ETH_RX_OFFLOAD_* */
> +     /** need to alloc dummy mbuf, for wraparound when scanning hw ring */
> +     struct rte_mbuf fake_mbuf;
> +     const struct rte_memzone *mz;
> +     union {
> +             struct { /* ixgbe specific values */
> +                     /** indicates that IPsec RX feature is in use */
> +                     uint8_t using_ipsec;
> +                     /** Packet type mask for different NICs. */
> +                     uint16_t pkt_type_mask;
> +                     /** UDP frames with a 0 checksum can be marked as 
> checksum errors. */
> +                     uint8_t rx_udp_csum_zero_err;
> +                     /** flags to set in mbuf when a vlan is detected. */
> +                     uint64_t vlan_flags;

These ixgbe fields should probably be sorted by size.

> +             };
> +     };
> +};
<snip>

Reply via email to