ethdev: count devices consistently
Make the rte_eth_dev_count() return the number of available devices even after some are detached by the hotplug API or put in a deferred state. Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com> Acked-by: Thomas Monjalon <thomas@monjalon.net>
This commit is contained in:
parent
cb894d99ec
commit
d1fe33bfc7
@ -72,7 +72,6 @@ static const char *MZ_RTE_ETH_DEV_DATA = "rte_eth_dev_data";
|
|||||||
struct rte_eth_dev rte_eth_devices[RTE_MAX_ETHPORTS];
|
struct rte_eth_dev rte_eth_devices[RTE_MAX_ETHPORTS];
|
||||||
static struct rte_eth_dev_data *rte_eth_dev_data;
|
static struct rte_eth_dev_data *rte_eth_dev_data;
|
||||||
static uint8_t eth_dev_last_created_port;
|
static uint8_t eth_dev_last_created_port;
|
||||||
static uint8_t nb_ports;
|
|
||||||
|
|
||||||
/* spinlock for eth device callbacks */
|
/* spinlock for eth device callbacks */
|
||||||
static rte_spinlock_t rte_eth_dev_cb_lock = RTE_SPINLOCK_INITIALIZER;
|
static rte_spinlock_t rte_eth_dev_cb_lock = RTE_SPINLOCK_INITIALIZER;
|
||||||
@ -210,7 +209,6 @@ eth_dev_get(uint8_t port_id)
|
|||||||
TAILQ_INIT(&(eth_dev->link_intr_cbs));
|
TAILQ_INIT(&(eth_dev->link_intr_cbs));
|
||||||
|
|
||||||
eth_dev_last_created_port = port_id;
|
eth_dev_last_created_port = port_id;
|
||||||
nb_ports++;
|
|
||||||
|
|
||||||
return eth_dev;
|
return eth_dev;
|
||||||
}
|
}
|
||||||
@ -283,7 +281,6 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
eth_dev->state = RTE_ETH_DEV_UNUSED;
|
eth_dev->state = RTE_ETH_DEV_UNUSED;
|
||||||
nb_ports--;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +305,15 @@ rte_eth_dev_socket_id(uint8_t port_id)
|
|||||||
uint8_t
|
uint8_t
|
||||||
rte_eth_dev_count(void)
|
rte_eth_dev_count(void)
|
||||||
{
|
{
|
||||||
return nb_ports;
|
uint8_t p;
|
||||||
|
uint8_t count;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
|
||||||
|
RTE_ETH_FOREACH_DEV(p)
|
||||||
|
count++;
|
||||||
|
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -341,9 +346,6 @@ rte_eth_dev_get_port_by_name(const char *name, uint8_t *port_id)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nb_ports)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
RTE_ETH_FOREACH_DEV(i) {
|
RTE_ETH_FOREACH_DEV(i) {
|
||||||
if (!rte_eth_devices[i].device)
|
if (!rte_eth_devices[i].device)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1750,13 +1750,12 @@ uint8_t rte_eth_find_next(uint8_t port_id);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the total number of Ethernet devices that have been successfully
|
* Get the total number of Ethernet devices that have been successfully
|
||||||
* initialized by the [matching] Ethernet driver during the PCI probing phase.
|
* initialized by the matching Ethernet driver during the PCI probing phase
|
||||||
* All devices whose port identifier is in the range
|
* and that are available for applications to use. These devices must be
|
||||||
* [0, rte_eth_dev_count() - 1] can be operated on by network applications
|
* accessed by using the ``RTE_ETH_FOREACH_DEV()`` macro to deal with
|
||||||
* immediately after invoking rte_eal_init().
|
* non-contiguous ranges of devices.
|
||||||
* If the application unplugs a port using hotplug function, The enabled port
|
* These non-contiguous ranges can be created by calls to hotplug functions or
|
||||||
* numbers may be noncontiguous. In the case, the applications need to manage
|
* by some PMDs.
|
||||||
* enabled port by using the ``RTE_ETH_FOREACH_DEV()`` macro.
|
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* - The total number of usable Ethernet devices.
|
* - The total number of usable Ethernet devices.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user