Your right my test was crude. Just do build and look at symbol table of
static linked binary.
I was confused since pointer is exposed but not data structure

On Thu, Dec 5, 2024, 07:40 David Marchand <david.march...@redhat.com> wrote:

> On Tue, Dec 3, 2024 at 10:13 PM Stephen Hemminger
> <step...@networkplumber.org> wrote:
> >
> > On Mon, 21 Oct 2024 01:52:46 +0000
> > Wathsala Vithanage <wathsala.vithan...@arm.com> wrote:
> >
> > > Extend the ethdev library to enable the stashing of different data
> > > objects, such as the ones listed below, into CPU caches directly
> > > from the NIC.
> > >
> > > - Rx/Tx queue descriptors
> > > - Rx packets
> > > - Packet headers
> > > - packet payloads
> > > - Data of a packet at an offset from the start of the packet
> > >
> > > The APIs are designed in a hardware/vendor agnostic manner such that
> > > supporting PMDs could use any capabilities available in the underlying
> > > hardware for fine-grained stashing of data objects into a CPU cache
> > > (e.g., Steering Tags int PCIe TLP Processing Hints).
> > >
> > > The API provides an interface to query the availability of stashing
> > > capabilities, i.e., platform/NIC support, stashable object types, etc,
> > > via the rte_eth_dev_stashing_capabilities_get interface.
> > >
> > > The function pair rte_eth_dev_stashing_rx_config_set and
> > > rte_eth_dev_stashing_tx_config_set sets the stashing hint (the CPU,
> > > cache level, and data object types) on the Rx and Tx queues.
> > >
> > > PMDs that support stashing must register their implementations with the
> > > following eth_dev_ops callbacks, which are invoked by the ethdev
> > > functions listed above.
> > >
> > > - stashing_capabilities_get
> > > - stashing_rx_hints_set
> > > - stashing_tx_hints_set
> > >
> > > Signed-off-by: Wathsala Vithanage <wathsala.vithan...@arm.com>
> > > Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
> > > Reviewed-by: Dhruv Tripathi <dhruv.tripa...@arm.com>
> > >
> > > ---
> > >  lib/ethdev/ethdev_driver.h |  66 +++++++++++++++
> > >  lib/ethdev/rte_ethdev.c    | 120 +++++++++++++++++++++++++++
> > >  lib/ethdev/rte_ethdev.h    | 161 +++++++++++++++++++++++++++++++++++++
> > >  lib/ethdev/version.map     |   4 +
> > >  4 files changed, 351 insertions(+)
> > >
> > > diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h
> > > index 1fd4562b40..7caaea54a8 100644
> > > --- a/lib/ethdev/ethdev_driver.h
> > > +++ b/lib/ethdev/ethdev_driver.h
> > > @@ -1367,6 +1367,68 @@ enum rte_eth_dev_operation {
> > >  typedef uint64_t (*eth_get_restore_flags_t)(struct rte_eth_dev *dev,
> > >                                           enum rte_eth_dev_operation
> op);
> > >
> > > +/**
> > > + * @internal
> > > + * Set cache stashing hints in Rx queue.
> > > + *
> > > + * @param dev
> > > + *   Port (ethdev) handle.
> > > + * @param queue_id
> > > + *   Rx queue.
> > > + * @param config
> > > + *   Stashing hints configuration for the queue.
> > > + *
> > > + * @return
> > > + *   -ENOTSUP if the device or the platform does not support cache
> stashing.
> > > + *   -ENOSYS  if the underlying PMD hasn't implemented cache stashing
> feature.
> > > + *   -EINVAL  on invalid arguments.
> > > + *   0 on success.
> > > + */
> > > +typedef int (*eth_stashing_rx_hints_set_t)(struct rte_eth_dev *dev,
> uint16_t queue_id,
> > > +                                        struct
> rte_eth_stashing_config *config);
> > > +
> > > +/**
> > > + * @internal
> > > + * Set cache stashing hints in Tx queue.
> > > + *
> > > + * @param dev
> > > + *   Port (ethdev) handle.
> > > + * @param queue_id
> > > + *   Tx queue.
> > > + * @param config
> > > + *   Stashing hints configuration for the queue.
> > > + *
> > > + * @return
> > > + *   -ENOTSUP if the device or the platform does not support cache
> stashing.
> > > + *   -ENOSYS  if the underlying PMD hasn't implemented cache stashing
> feature.
> > > + *   -EINVAL  on invalid arguments.
> > > + *   0 on success.
> > > + */
> > > +typedef int (*eth_stashing_tx_hints_set_t)(struct rte_eth_dev *dev,
> uint16_t queue_id,
> > > +                                        struct
> rte_eth_stashing_config *config);
> > > +
> > > +/**
> > > + * @internal
> > > + * Get cache stashing object types supported in the ethernet device.
> > > + * The return value indicates availability of stashing hints support
> > > + * in the hardware and the PMD.
> > > + *
> > > + * @param dev
> > > + *   Port (ethdev) handle.
> > > + * @param objects
> > > + *   PMD sets supported bits on return.
> > > + *
> > > + * @return
> > > + *   -ENOTSUP if the device or the platform does not support cache
> stashing.
> > > + *   -ENOSYS  if the underlying PMD hasn't implemented cache stashing
> feature.
> > > + *   -EINVAL  on NULL values for types or hints parameters.
> > > + *   On return, types and hints parameters will have bits set for
> supported
> > > + *   object types and hints.
> > > + *   0 on success.
> > > + */
> > > +typedef int (*eth_stashing_capabilities_get_t)(struct rte_eth_dev
> *dev,
> > > +                                          uint16_t *objects);
> > > +
> > >  /**
> > >   * @internal A structure containing the functions exported by an
> Ethernet driver.
> > >   */
> > > @@ -1393,6 +1455,10 @@ struct eth_dev_ops {
> > >       eth_mac_addr_remove_t      mac_addr_remove; /**< Remove MAC
> address */
> > >       eth_mac_addr_add_t         mac_addr_add;  /**< Add a MAC address
> */
> > >       eth_mac_addr_set_t         mac_addr_set;  /**< Set a MAC address
> */
> > > +     eth_stashing_rx_hints_set_t   stashing_rx_hints_set; /**< Set Rx
> cache stashing*/
> > > +     eth_stashing_tx_hints_set_t   stashing_tx_hints_set; /**< Set Tx
> cache stashing*/
> > > +     /** Get supported stashing hints*/
> > > +     eth_stashing_capabilities_get_t stashing_capabilities_get;
> > >       /** Set list of multicast addresses */
> > >       eth_set_mc_addr_list_t     set_mc_addr_list;
> > >       mtu_set_t                  mtu_set;       /**< Set MTU */
> >
> > Since eth_dev_ops is visible in application binary, it is part of the
> ABI.
> > Therefore it can not be changed until 25.11 release.
>
> The layout of eth_dev_ops is not exposed to applications as it is in a
> private header.
> Could you clarify where you see a breakage for an application?
>
>
> I see an ABI breakage for out of tree drivers though.
> This could be avoided by moving those added ops at the end of the struct?
>
>
> --
> David Marchand
>
>

Reply via email to