cryptodev: fix checks related to device id
Each cryptodev are indexed with dev_id in the global rte_crypto_devices variable. nb_devs is incremented / decremented each time a cryptodev is created / deleted. The goal of nb_devs was to prevent the user to get an invalid dev_id. Let's imagine DPDK has configured N cryptodevs. If the cryptodev=1 is removed at runtime, the latest cryptodev N cannot be accessible, because nb_devs=N-1 with the current implementaion. In order to prevent this kind of behavior, let's remove the check with nb_devs and iterate in all the rte_crypto_devices elements: if data is not NULL, that means a valid cryptodev is available. Also, remove max_devs field and use RTE_CRYPTO_MAX_DEVS in order to unify the code. Fixes: d11b0f30df88 ("cryptodev: introduce API and framework for crypto devices") Cc: stable@dpdk.org Signed-off-by: Julien Meunier <julien.meunier@nokia.com> Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
This commit is contained in:
parent
88d664aa1c
commit
3dd4435cf4
@ -50,8 +50,7 @@ struct rte_cryptodev *rte_cryptodevs = rte_crypto_devices;
|
||||
static struct rte_cryptodev_global cryptodev_globals = {
|
||||
.devs = rte_crypto_devices,
|
||||
.data = { NULL },
|
||||
.nb_devs = 0,
|
||||
.max_devs = RTE_CRYPTO_MAX_DEVS
|
||||
.nb_devs = 0
|
||||
};
|
||||
|
||||
/* spinlock for crypto device callbacks */
|
||||
@ -512,7 +511,7 @@ rte_cryptodev_pmd_get_named_dev(const char *name)
|
||||
if (name == NULL)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < cryptodev_globals.max_devs; i++) {
|
||||
for (i = 0; i < RTE_CRYPTO_MAX_DEVS; i++) {
|
||||
dev = &cryptodev_globals.devs[i];
|
||||
|
||||
if ((dev->attached == RTE_CRYPTODEV_ATTACHED) &&
|
||||
@ -523,12 +522,21 @@ rte_cryptodev_pmd_get_named_dev(const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline uint8_t
|
||||
rte_cryptodev_is_valid_device_data(uint8_t dev_id)
|
||||
{
|
||||
if (rte_crypto_devices[dev_id].data == NULL)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
rte_cryptodev_pmd_is_valid_dev(uint8_t dev_id)
|
||||
{
|
||||
struct rte_cryptodev *dev = NULL;
|
||||
|
||||
if (dev_id >= cryptodev_globals.nb_devs)
|
||||
if (!rte_cryptodev_is_valid_device_data(dev_id))
|
||||
return 0;
|
||||
|
||||
dev = rte_cryptodev_pmd_get_dev(dev_id);
|
||||
@ -547,12 +555,15 @@ rte_cryptodev_get_dev_id(const char *name)
|
||||
if (name == NULL)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < cryptodev_globals.nb_devs; i++)
|
||||
for (i = 0; i < RTE_CRYPTO_MAX_DEVS; i++) {
|
||||
if (!rte_cryptodev_is_valid_device_data(i))
|
||||
continue;
|
||||
if ((strcmp(cryptodev_globals.devs[i].data->name, name)
|
||||
== 0) &&
|
||||
(cryptodev_globals.devs[i].attached ==
|
||||
RTE_CRYPTODEV_ATTACHED))
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -568,7 +579,7 @@ rte_cryptodev_device_count_by_driver(uint8_t driver_id)
|
||||
{
|
||||
uint8_t i, dev_count = 0;
|
||||
|
||||
for (i = 0; i < cryptodev_globals.max_devs; i++)
|
||||
for (i = 0; i < RTE_CRYPTO_MAX_DEVS; i++)
|
||||
if (cryptodev_globals.devs[i].driver_id == driver_id &&
|
||||
cryptodev_globals.devs[i].attached ==
|
||||
RTE_CRYPTODEV_ATTACHED)
|
||||
@ -583,9 +594,10 @@ rte_cryptodev_devices_get(const char *driver_name, uint8_t *devices,
|
||||
{
|
||||
uint8_t i, count = 0;
|
||||
struct rte_cryptodev *devs = cryptodev_globals.devs;
|
||||
uint8_t max_devs = cryptodev_globals.max_devs;
|
||||
|
||||
for (i = 0; i < max_devs && count < nb_devices; i++) {
|
||||
for (i = 0; i < RTE_CRYPTO_MAX_DEVS && count < nb_devices; i++) {
|
||||
if (!rte_cryptodev_is_valid_device_data(i))
|
||||
continue;
|
||||
|
||||
if (devs[i].attached == RTE_CRYPTODEV_ATTACHED) {
|
||||
int cmp;
|
||||
@ -1101,7 +1113,7 @@ rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info)
|
||||
{
|
||||
struct rte_cryptodev *dev;
|
||||
|
||||
if (dev_id >= cryptodev_globals.nb_devs) {
|
||||
if (!rte_cryptodev_pmd_is_valid_dev(dev_id)) {
|
||||
CDEV_LOG_ERR("Invalid dev_id=%d", dev_id);
|
||||
return;
|
||||
}
|
||||
|
@ -61,7 +61,6 @@ struct rte_cryptodev_global {
|
||||
struct rte_cryptodev_data *data[RTE_CRYPTO_MAX_DEVS];
|
||||
/**< Device private data */
|
||||
uint8_t nb_devs; /**< Number of devices found */
|
||||
uint8_t max_devs; /**< Max number of devices */
|
||||
};
|
||||
|
||||
/* Cryptodev driver, containing the driver ID */
|
||||
|
Loading…
x
Reference in New Issue
Block a user