[dpdk-dev] [PATCH v5 1/3] ethdev: introduce Rx queue offloads API
Shahaf Shuler
shahafs at mellanox.com
Tue Oct 3 08:25:48 CEST 2017
Hi Ferruh,
Tuesday, October 3, 2017 3:32 AM, Ferruh Yigit:
> On 9/28/2017 7:54 PM, Shahaf Shuler wrote:
> > Introduce a new API to configure Rx offloads.
> >
> > In the new API, offloads are divided into per-port and per-queue
> > offloads. The PMD reports capability for each of them.
> > Offloads are enabled using the existing DEV_RX_OFFLOAD_* flags.
> > To enable per-port offload, the offload should be set on both device
> > configuration and queue configuration. To enable per-queue offload,
> > the offloads can be set only on queue configuration.
> >
> > Applications should set the ignore_offload_bitfield bit on rxmode
> > structure in order to move to the new API.
> >
> > The old Rx offloads API is kept for the meanwhile, in order to enable
> > a smooth transition for PMDs and application to the new API.
> >
> > Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
>
> <...>
>
> > @@ -1102,8 +1193,18 @@ rte_eth_rx_queue_setup(uint8_t port_id,
> uint16_t rx_queue_id,
> > if (rx_conf == NULL)
> > rx_conf = &dev_info.default_rxconf;
> >
> > + local_conf = *rx_conf;
> > + if (dev->data->dev_conf.rxmode.ignore_offload_bitfield == 0) {
> > + /**
> > + * Reflect port offloads to queue offloads in order for
> > + * offloads to not be discarded.
> > + */
> > + rte_eth_convert_rx_offload_bitfield(&dev->data-
> >dev_conf.rxmode,
> > + &local_conf.offloads);
> > + }
>
> If an application switches to the new method, it will set "offloads" and if
> underlying PMD doesn't support the new method it will just do nothing with
> "offloads" variable but problem is application won't know PMD just ignored
> them, it may think per queue offloads set.
>
> Does it make sense to notify application that PMD doesn't understand that
> new "offloads" flag?
I don't think it is needed. In the new API the per-queue Rx offloads caps are reported using a new rx_queue_offload_capa field. Old PMD will not set it, therefore application which use the new API will see that the underlying PMD is supporting only per-port Rx offloads.
This should be enough for it to understand that the per-queue offloads won't be set.
>
> > +
> > ret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id,
> nb_rx_desc,
> > - socket_id, rx_conf, mp);
> > + socket_id, &local_conf, mp);
> > if (!ret) {
> > if (!dev->data->min_rx_buf_size ||
> > dev->data->min_rx_buf_size > mbp_buf_size)
>
> <...>
>
> > /**
> > @@ -691,6 +712,12 @@ struct rte_eth_rxconf {
> > uint16_t rx_free_thresh; /**< Drives the freeing of RX descriptors.
> */
> > uint8_t rx_drop_en; /**< Drop packets if no descriptors are
> available. */
> > uint8_t rx_deferred_start; /**< Do not start queue with
> > rte_eth_dev_start(). */
> > + /**
> > + * Per-queue Rx offloads to be set using DEV_RX_OFFLOAD_* flags.
> > + * Only offloads set on rx_queue_offload_capa or rx_offload_capa
> > + * fields on rte_eth_dev_info structure are allowed to be set.
> > + */
>
> How application will use above "capa" flags to decide what to set? Since
> "rx_queue_offload_capa" is new field introduced with this patch no PMD
> implemented it yet, does it means no application will be able to use per
> queue offloads yet?
Yes.
Application which use the new offloads API should query the device info and look into the rx_offloads_capa and rx_queue_offloads_capa.
According to those 2 caps it will decide how to set the offloads.
Per-queue Rx offloads is a new functionality introduced in this series. Of course old PMD will not support it, and this will be reflected on the rx_queue_offlaods_capa.
>
> > + uint64_t offloads;
> > };
> >
>
> <...>
More information about the dev
mailing list