Commit e0bce5b1 authored by Tomasz Zawadzki's avatar Tomasz Zawadzki Committed by Jim Harris
Browse files

bdev/crypto: separate out cryptodev session create/free



This patch separates out the session creation and freeing
to two static functions. Later in the series it will
limit the required changes.

Signed-off-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I9fb1070d0f5a062991ba82580886ff41c2eeaa4a
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15432


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 721f606d
Loading
Loading
Loading
Loading
+45 −42
Original line number Diff line number Diff line
@@ -1377,6 +1377,39 @@ _vdev_dev_get(struct vbdev_crypto *vbdev)
	return NULL;
}

static void
_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *session)
{
	rte_cryptodev_sym_session_free(session);
}

static struct rte_cryptodev_sym_session *
_cryptodev_sym_session_create(struct vbdev_crypto *vbdev, struct rte_crypto_sym_xform *xforms)
{
	struct rte_cryptodev_sym_session *session;
	struct vbdev_dev *device;
	int rc = 0;

	device = _vdev_dev_get(vbdev);
	if (!device) {
		SPDK_ERRLOG("Failed to match crypto device driver to crypto vbdev.\n");
		return NULL;
	}

	session = rte_cryptodev_sym_session_create(g_session_mp);
	if (!session) {
		return NULL;
	}

	rc = rte_cryptodev_sym_session_init(device->cdev_id, session, xforms,
					    g_session_mp_priv ? g_session_mp_priv : g_session_mp);
	if (rc < 0) {
		_cryptodev_sym_session_free(session);
		return NULL;
	}
	return session;
}

/* Callback for unregistering the IO device. */
static void
_device_unregister_cb(void *io_device)
@@ -1384,8 +1417,8 @@ _device_unregister_cb(void *io_device)
	struct vbdev_crypto *crypto_bdev = io_device;

	/* Done with this crypto_bdev. */
	rte_cryptodev_sym_session_free(crypto_bdev->session_decrypt);
	rte_cryptodev_sym_session_free(crypto_bdev->session_encrypt);
	_cryptodev_sym_session_free(crypto_bdev->session_decrypt);
	_cryptodev_sym_session_free(crypto_bdev->session_encrypt);
	crypto_bdev->opts = NULL;
	free(crypto_bdev->crypto_bdev.name);
	free(crypto_bdev);
@@ -1860,7 +1893,6 @@ vbdev_crypto_claim(const char *bdev_name)
{
	struct bdev_names *name;
	struct vbdev_crypto *vbdev;
	struct vbdev_dev *device;
	struct spdk_bdev *bdev;
	uint8_t key_size;
	int rc = 0;
@@ -1967,29 +1999,6 @@ vbdev_crypto_claim(const char *bdev_name)
			goto error_claim;
		}

		/* To init the session we have to get the cryptoDev device ID for this vbdev */
		device = _vdev_dev_get(vbdev);
		if (!device) {
			SPDK_ERRLOG("Failed to match crypto device driver to crypto vbdev.\n");
			rc = -EINVAL;
			goto error_cant_find_devid;
		}

		/* Get sessions. */
		vbdev->session_encrypt = rte_cryptodev_sym_session_create(g_session_mp);
		if (NULL == vbdev->session_encrypt) {
			SPDK_ERRLOG("Failed to create encrypt crypto session.\n");
			rc = -EINVAL;
			goto error_session_en_create;
		}

		vbdev->session_decrypt = rte_cryptodev_sym_session_create(g_session_mp);
		if (NULL == vbdev->session_decrypt) {
			SPDK_ERRLOG("Failed to create decrypt crypto session.\n");
			rc = -EINVAL;
			goto error_session_de_create;
		}

		/* Init our per vbdev xform with the desired cipher options. */
		vbdev->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
		vbdev->cipher_xform.cipher.iv.offset = IV_OFFSET;
@@ -2010,23 +2019,19 @@ vbdev_crypto_claim(const char *bdev_name)
		vbdev->cipher_xform.cipher.iv.length = IV_LENGTH;

		vbdev->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
		rc = rte_cryptodev_sym_session_init(device->cdev_id, vbdev->session_encrypt,
						    &vbdev->cipher_xform,
						    g_session_mp_priv ? g_session_mp_priv : g_session_mp);
		if (rc < 0) {
			SPDK_ERRLOG("Failed to init encrypt session: error %d\n", rc);
		vbdev->session_encrypt = _cryptodev_sym_session_create(vbdev, &vbdev->cipher_xform);
		if (NULL == vbdev->session_encrypt) {
			SPDK_ERRLOG("Failed to create encrypt crypto session.\n");
			rc = -EINVAL;
			goto error_session_init;
			goto error_session_en_create;
		}

		vbdev->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
		rc = rte_cryptodev_sym_session_init(device->cdev_id, vbdev->session_decrypt,
						    &vbdev->cipher_xform,
						    g_session_mp_priv ? g_session_mp_priv : g_session_mp);
		if (rc < 0) {
			SPDK_ERRLOG("Failed to init decrypt session: error %d\n", rc);
		vbdev->session_decrypt = _cryptodev_sym_session_create(vbdev, &vbdev->cipher_xform);
		if (NULL == vbdev->session_decrypt) {
			SPDK_ERRLOG("Failed to create decrypt crypto session.\n");
			rc = -EINVAL;
			goto error_session_init;
			goto error_session_de_create;
		}

		rc = spdk_bdev_register(&vbdev->crypto_bdev);
@@ -2044,12 +2049,10 @@ vbdev_crypto_claim(const char *bdev_name)

	/* Error cleanup paths. */
error_bdev_register:
error_session_init:
	rte_cryptodev_sym_session_free(vbdev->session_decrypt);
	_cryptodev_sym_session_free(vbdev->session_decrypt);
error_session_de_create:
	rte_cryptodev_sym_session_free(vbdev->session_encrypt);
	_cryptodev_sym_session_free(vbdev->session_encrypt);
error_session_en_create:
error_cant_find_devid:
	spdk_bdev_module_release_bdev(vbdev->base_bdev);
error_claim:
	TAILQ_REMOVE(&g_vbdev_crypto, vbdev, link);