ethdev: copy fast-path API into separate structure
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Wed, 13 Oct 2021 13:37:01 +0000 (14:37 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 13 Oct 2021 20:14:58 +0000 (22:14 +0200)
commitc87d435a4d79739c0cec2ed280b94b41cb908af7
treea1a3693a0ec572dd4108354e87bae3cd943beff0
parent8d7d4fcdcabe7f71ea79e62ac8d23257099623e6
ethdev: copy fast-path API into separate structure

Copy public function pointers (rx_pkt_burst(), etc.) and related
pointers to internal data from rte_eth_dev structure into a
separate flat array. That array will remain in a public header.
The intention here is to make rte_eth_dev and related structures internal.
That should allow future possible changes to core eth_dev structures
to be transparent to the user and help to avoid ABI/API breakages.
The plan is to keep minimal part of data from rte_eth_dev public,
so we still can use inline functions for fast-path calls
(like rte_eth_rx_burst(), etc.) to avoid/minimize slowdown.
The whole idea beyond this new schema:
1. PMDs keep to setup fast-path function pointers and related data
   inside rte_eth_dev struct in the same way they did it before.
2. Inside rte_eth_dev_start() and inside rte_eth_dev_probing_finish()
   (for secondary process) we call eth_dev_fp_ops_setup, which
   copies these function and data pointers into rte_eth_fp_ops[port_id].
3. Inside rte_eth_dev_stop() and inside rte_eth_dev_release_port()
   we call eth_dev_fp_ops_reset(), which resets rte_eth_fp_ops[port_id]
   into some dummy values.
4. fast-path ethdev API (rte_eth_rx_burst(), etc.) will use that new
   flat array to call PMD specific functions.
That approach should allow us to make rte_eth_devices[] private
without introducing regression and help to avoid changes in drivers code.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Tested-by: Feifei Wang <feifei.wang2@arm.com>
lib/ethdev/ethdev_private.c
lib/ethdev/ethdev_private.h
lib/ethdev/rte_ethdev.c
lib/ethdev/rte_ethdev_core.h