After removing the function rte_eth_dev_attach(),
there are two replacement solutions possible:
one using probe event notification, and one using a new iterator.
So the application can get the new probed ports either asynchronously
or synchronously.
The iterator API is new in DPDK 18.11 so they got the experimental
tag by policy. It causes an issue for strict applications which do
not use experimental functions, and want to use the synchronous method.
The replacement for removed API should not be experimental.
That's why the experimental status of the ethdev iterator is removed.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
Tested-by: Kevin Traynor <ktraynor@redhat.com>
rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
{
int ret;
rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
{
int ret;
-uint16_t __rte_experimental
rte_eth_iterator_next(struct rte_dev_iterator *iter)
{
if (iter->cls == NULL) /* invalid ethdev iterator */
rte_eth_iterator_next(struct rte_dev_iterator *iter)
{
if (iter->cls == NULL) /* invalid ethdev iterator */
return RTE_MAX_ETHPORTS;
}
return RTE_MAX_ETHPORTS;
}
rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)
{
if (iter->bus_str == NULL)
rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)
{
if (iter->bus_str == NULL)
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Initializes a device iterator.
*
* This iterator allows accessing a list of devices matching some devargs.
* Initializes a device iterator.
*
* This iterator allows accessing a list of devices matching some devargs.
* @return
* 0 on successful initialization, negative otherwise.
*/
* @return
* 0 on successful initialization, negative otherwise.
*/
int rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs);
/**
int rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Iterates on devices with devargs filter.
* The ownership is not checked.
*
* Iterates on devices with devargs filter.
* The ownership is not checked.
*
* @return
* A port id if found, RTE_MAX_ETHPORTS otherwise.
*/
* @return
* A port id if found, RTE_MAX_ETHPORTS otherwise.
*/
uint16_t rte_eth_iterator_next(struct rte_dev_iterator *iter);
/**
uint16_t rte_eth_iterator_next(struct rte_dev_iterator *iter);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Free some allocated fields of the iterator.
*
* This function is automatically called by rte_eth_iterator_next()
* Free some allocated fields of the iterator.
*
* This function is automatically called by rte_eth_iterator_next()
* Device iterator handle initialized by rte_eth_iterator_init().
* The fields bus_str and cls_str are freed if needed.
*/
* Device iterator handle initialized by rte_eth_iterator_init().
* The fields bus_str and cls_str are freed if needed.
*/
void rte_eth_iterator_cleanup(struct rte_dev_iterator *iter);
/**
void rte_eth_iterator_cleanup(struct rte_dev_iterator *iter);
/**
rte_eth_dev_rx_offload_name;
rte_eth_dev_tx_offload_name;
rte_eth_dev_rx_offload_name;
rte_eth_dev_tx_offload_name;
+ rte_eth_iterator_cleanup;
+ rte_eth_iterator_init;
+ rte_eth_iterator_next;
rte_eth_dev_owner_set;
rte_eth_dev_owner_unset;
rte_eth_dev_rx_intr_ctl_q_get_fd;
rte_eth_dev_owner_set;
rte_eth_dev_owner_unset;
rte_eth_dev_rx_intr_ctl_q_get_fd;
- rte_eth_iterator_cleanup;
- rte_eth_iterator_init;
- rte_eth_iterator_next;
rte_eth_switch_domain_alloc;
rte_eth_switch_domain_free;
rte_flow_conv;
rte_eth_switch_domain_alloc;
rte_eth_switch_domain_free;
rte_flow_conv;