Hi, Inline reply
On 16/10/2019 09:02, Akhil Goyal wrote: > Hi Julien, > > A couple of nits. Please see inline. > > Apart from that > Acked-by: Akhil Goyal <akhil.go...@nxp.com> > >> >> 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: sta...@dpdk.org >> >> Signed-off-by: Julien Meunier <julien.meun...@nokia.com> >> --- >> v2: >> * Restore nb_devs >> * Update headline (check-git-log.sh) >> * Update commit log >> >> lib/librte_cryptodev/rte_cryptodev.c | 30 +++++++++++++++++++++--------- >> 1 file changed, 21 insertions(+), 9 deletions(-) >> >> diff --git a/lib/librte_cryptodev/rte_cryptodev.c >> b/lib/librte_cryptodev/rte_cryptodev.c >> index b16ef7b..933c38d 100644 >> --- a/lib/librte_cryptodev/rte_cryptodev.c >> +++ b/lib/librte_cryptodev/rte_cryptodev.c >> @@ -50,8 +50,7 @@ >> 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 >> }; > > Max_devs field shall also be removed from struct rte_cryptodev_global in > "lib/librte_cryptodev/rte_cryptodev_pmd.h" Oops, yes, I didn't clean-up all the code :) I will do that. >> >> /* spinlock for crypto device callbacks */ >> @@ -512,7 +511,7 @@ struct rte_cryptodev * >> 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 @@ struct rte_cryptodev * >> return NULL; >> } >> >> +static uint8_t >> +rte_cryptodev_is_valid_device_data(uint8_t dev_id) >> +{ >> + if (rte_crypto_devices[dev_id].data == NULL) >> + return 0; >> + >> + return 1; >> +} > > rte_cryptodev_is_valid_device_data should be a static inline function. OK. > >> + >> 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 @@ struct rte_cryptodev * >> 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 @@ struct rte_cryptodev * >> { >> 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 @@ struct rte_cryptodev * >> { >> 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 @@ struct rte_cryptodev * >> { >> 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; >> } >> -- >> 1.8.3.1 > Thanks, -- Julien Meunier