bdev/crypto: Continue init after AESNI_MB failure

- Continue init of the other crypto devices (mlx5) after failure of
  rte_vdev_init(AESNI_MB) in vbdev_crypto_init_crypto_drivers(). It
  simply may not be enabled in DPDK because it requires IPSec_MB>=1.0
  installed in the system. Reproduces with --with-dpdk=dpdk/install
  option used, when the target DPDK is built without control of IPSec
  version from the SPDK side.
- Updated crypto_ut to test the new behavior of error handling from
  rte_vdev_init(AESNI_MB) in vbdev_crypto_init_crypto_drivers().

Signed-off-by: Yuriy Umanets <yumanets@nvidia.com>
Change-Id: Icd4db8877afe87db8166c40d6e7b414cd43c9c25
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11624
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Yuriy Umanets 2022-01-20 11:07:52 +02:00 committed by Tomasz Zawadzki
parent a837ea37da
commit 8ecf8dfcd7
2 changed files with 21 additions and 13 deletions

View File

@ -395,7 +395,7 @@ vbdev_crypto_init_crypto_drivers(void)
{
uint8_t cdev_count;
uint8_t cdev_id;
int i, rc = 0;
int i, rc;
struct vbdev_dev *device;
struct vbdev_dev *tmp_dev;
struct device_qp *dev_qp;
@ -412,8 +412,9 @@ vbdev_crypto_init_crypto_drivers(void)
snprintf(aesni_args, sizeof(aesni_args), "max_nb_queue_pairs=%d", AESNI_MB_NUM_QP);
rc = rte_vdev_init(AESNI_MB, aesni_args);
if (rc) {
SPDK_ERRLOG("error creating virtual PMD %s\n", AESNI_MB);
return -EINVAL;
SPDK_NOTICELOG("Failed to create virtual PMD %s: error %d. "
"Possibly %s is not supported by DPDK library. "
"Keep going...\n", AESNI_MB, rc, AESNI_MB);
}
/* If we have no crypto devices, there's no reason to continue. */

View File

@ -874,17 +874,8 @@ test_initdrivers(void)
CU_ASSERT(g_session_mp == NULL);
CU_ASSERT(g_session_mp_priv == NULL);
/* Test failure of DPDK dev init. */
MOCK_SET(rte_cryptodev_count, 2);
MOCK_SET(rte_vdev_init, -1);
rc = vbdev_crypto_init_crypto_drivers();
CU_ASSERT(rc == -EINVAL);
CU_ASSERT(g_mbuf_mp == NULL);
CU_ASSERT(g_session_mp == NULL);
CU_ASSERT(g_session_mp_priv == NULL);
MOCK_SET(rte_vdev_init, 0);
/* Can't create session pool. */
MOCK_SET(rte_cryptodev_count, 2);
MOCK_SET(spdk_mempool_create, NULL);
rc = vbdev_crypto_init_crypto_drivers();
CU_ASSERT(rc == -ENOMEM);
@ -964,6 +955,22 @@ test_initdrivers(void)
init_cleanup();
CU_ASSERT(rc == 0);
/* Test failure of DPDK dev init. By now it is not longer an error
* situation for entire crypto framework. */
MOCK_SET(rte_cryptodev_count, 2);
MOCK_SET(rte_cryptodev_device_count_by_driver, 2);
MOCK_SET(rte_vdev_init, -1);
MOCK_CLEARED_ASSERT(spdk_mempool_create);
MOCK_SET(rte_cryptodev_info_get, MOCK_INFO_GET_1QP_QAT);
rc = vbdev_crypto_init_crypto_drivers();
CU_ASSERT(rc == 0);
CU_ASSERT(g_mbuf_mp != NULL);
CU_ASSERT(g_session_mp != NULL);
CU_ASSERT(g_session_mp_priv != NULL);
init_cleanup();
MOCK_SET(rte_vdev_init, 0);
MOCK_CLEAR(rte_cryptodev_device_count_by_driver);
/* restore our initial values. */
g_mbuf_mp = orig_mbuf_mp;
g_session_mp = orig_session_mp;