From c9030ae382eb942485dfa4e7657b4953bc77b2a9 Mon Sep 17 00:00:00 2001 From: Anoob Joseph Date: Tue, 25 Jun 2019 11:09:24 +0530 Subject: [PATCH] cryptodev: add feature flags to disable Adding a new field, ff_disable, to allow applications to control the features enabled on the crypto device. This would allow for efficient usage of HW/SW offloads. Signed-off-by: Anoob Joseph Acked-by: Akhil Goyal --- app/test-crypto-perf/main.c | 3 ++- app/test/test_cryptodev.c | 2 ++ app/test/test_event_crypto_adapter.c | 1 + app/test/test_ipsec.c | 1 + doc/guides/rel_notes/deprecation.rst | 14 -------------- doc/guides/rel_notes/release_19_08.rst | 12 +++++++++++- examples/fips_validation/fips_dev_self_test.c | 6 +++++- examples/fips_validation/main.c | 2 +- examples/ip_pipeline/cryptodev.c | 1 + examples/ipsec-secgw/ipsec-secgw.c | 1 + examples/l2fwd-crypto/main.c | 1 + examples/vhost_crypto/main.c | 1 + lib/librte_cryptodev/Makefile | 2 +- lib/librte_cryptodev/meson.build | 2 +- lib/librte_cryptodev/rte_cryptodev.h | 7 +++++++ 15 files changed, 36 insertions(+), 20 deletions(-) diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c index 4247f6add9..db0290751c 100644 --- a/app/test-crypto-perf/main.c +++ b/app/test-crypto-perf/main.c @@ -200,7 +200,8 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs) } struct rte_cryptodev_config conf = { .nb_queue_pairs = opts->nb_qps, - .socket_id = socket_id + .socket_id = socket_id, + .ff_disable = RTE_CRYPTODEV_FF_SECURITY, }; struct rte_cryptodev_qp_conf qp_conf = { diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index 0509af7b6c..ea874290f8 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -430,6 +430,7 @@ testsuite_setup(void) ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs; ts_params->conf.socket_id = SOCKET_ID_ANY; + ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; unsigned int session_size = rte_cryptodev_sym_get_private_session_size(dev_id); @@ -524,6 +525,7 @@ ut_setup(void) /* Reconfigure device to default parameters */ ts_params->conf.socket_id = SOCKET_ID_ANY; + ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; ts_params->qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; ts_params->qp_conf.mp_session = ts_params->session_mpool; ts_params->qp_conf.mp_session_private = ts_params->session_priv_mpool; diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c index f750ce3d8c..73655020df 100644 --- a/app/test/test_event_crypto_adapter.c +++ b/app/test/test_event_crypto_adapter.c @@ -548,6 +548,7 @@ configure_cryptodev(void) rte_cryptodev_info_get(TEST_CDEV_ID, &info); conf.nb_queue_pairs = info.max_nb_queue_pairs; conf.socket_id = SOCKET_ID_ANY; + conf.ff_disable = RTE_CRYPTODEV_FF_SECURITY; TEST_ASSERT_SUCCESS(rte_cryptodev_configure(TEST_CDEV_ID, &conf), "Failed to configure cryptodev %u with %u qps\n", diff --git a/app/test/test_ipsec.c b/app/test/test_ipsec.c index 83f789508f..2854b837e2 100644 --- a/app/test/test_ipsec.c +++ b/app/test/test_ipsec.c @@ -342,6 +342,7 @@ testsuite_setup(void) ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs; ts_params->conf.socket_id = SOCKET_ID_ANY; + ts_params->conf.ff_disable = RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO; sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id); sess_sz = RTE_MAX(sess_sz, sizeof(struct rte_security_session)); diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 583217da8e..a7796f49b9 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -59,20 +59,6 @@ Deprecation Notices Target release for removal of the legacy API will be defined once most PMDs have switched to rte_flow. -* cryptodev: New member in ``rte_cryptodev_config`` to allow applications to - disable features supported by the crypto device. Only the following features - would be allowed to be disabled this way, - - - ``RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO`` - - ``RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO`` - - ``RTE_CRYPTODEV_FF_SECURITY`` - - Disabling unused features would facilitate efficient usage of HW/SW offload. - - - Member ``uint64_t ff_disable`` in ``rte_cryptodev_config`` - - The field would be added in v19.08. - * cryptodev: the ``uint8_t *data`` member of ``key`` structure in the xforms structure (``rte_crypto_cipher_xform``, ``rte_crypto_auth_xform``, and ``rte_crypto_aead_xform``) will be changed to ``const uint8_t *data``. diff --git a/doc/guides/rel_notes/release_19_08.rst b/doc/guides/rel_notes/release_19_08.rst index 5f16f53bf1..40d3079b17 100644 --- a/doc/guides/rel_notes/release_19_08.rst +++ b/doc/guides/rel_notes/release_19_08.rst @@ -236,6 +236,16 @@ ABI Changes Add a Rx adapter stats field to keep track of the total number of dropped packets. +* cryptodev: New member in ``rte_cryptodev_config`` to allow applications to + disable features supported by the crypto device. Only the following features + would be allowed to be disabled this way, + + - ``RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO`` + - ``RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO`` + - ``RTE_CRYPTODEV_FF_SECURITY`` + + Disabling unused features would facilitate efficient usage of HW/SW offload. + Shared Library Versions ----------------------- @@ -267,7 +277,7 @@ The libraries prepended with a plus sign were incremented in this version. librte_cfgfile.so.2 librte_cmdline.so.2 librte_compressdev.so.1 - librte_cryptodev.so.7 + + librte_cryptodev.so.8 librte_distributor.so.1 + librte_eal.so.11 librte_efd.so.1 diff --git a/examples/fips_validation/fips_dev_self_test.c b/examples/fips_validation/fips_dev_self_test.c index 444bbaa796..17e85973c0 100644 --- a/examples/fips_validation/fips_dev_self_test.c +++ b/examples/fips_validation/fips_dev_self_test.c @@ -1557,12 +1557,16 @@ fips_dev_auto_test_uninit(uint8_t dev_id, static int fips_dev_auto_test_init(uint8_t dev_id, struct fips_dev_auto_test_env *env) { - struct rte_cryptodev_config conf = {rte_cryptodev_socket_id(dev_id), 1}; struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL}; uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id); + struct rte_cryptodev_config conf; char name[128]; int ret; + conf.socket_id = rte_cryptodev_socket_id(dev_id); + conf.nb_queue_pairs = 1; + conf.ff_disable = 0; + ret = rte_cryptodev_configure(dev_id, &conf); if (ret < 0) return ret; diff --git a/examples/fips_validation/main.c b/examples/fips_validation/main.c index aef45055e8..8135340689 100644 --- a/examples/fips_validation/main.c +++ b/examples/fips_validation/main.c @@ -48,7 +48,7 @@ struct cryptodev_fips_validate_env { static int cryptodev_fips_validate_app_int(void) { - struct rte_cryptodev_config conf = {rte_socket_id(), 1}; + struct rte_cryptodev_config conf = {rte_socket_id(), 1, 0}; struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL}; uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size( env.dev_id); diff --git a/examples/ip_pipeline/cryptodev.c b/examples/ip_pipeline/cryptodev.c index ac1e38d6a2..ab5e926471 100644 --- a/examples/ip_pipeline/cryptodev.c +++ b/examples/ip_pipeline/cryptodev.c @@ -95,6 +95,7 @@ cryptodev_create(const char *name, struct cryptodev_params *params) dev_conf.socket_id = socket_id; dev_conf.nb_queue_pairs = params->n_queues; + dev_conf.ff_disable = 0; status = rte_cryptodev_configure(dev_id, &dev_conf); if (status < 0) diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c index 6c626fa5f7..931e5ea0ab 100644 --- a/examples/ipsec-secgw/ipsec-secgw.c +++ b/examples/ipsec-secgw/ipsec-secgw.c @@ -1720,6 +1720,7 @@ cryptodevs_init(void) dev_conf.socket_id = rte_cryptodev_socket_id(cdev_id); dev_conf.nb_queue_pairs = qp; + dev_conf.ff_disable = RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO; uint32_t dev_max_sess = cdev_info.sym.max_nb_sessions; if (dev_max_sess != 0 && dev_max_sess < CDEV_MP_NB_OBJS) diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index e282cb7bf0..b2f2011229 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -2256,6 +2256,7 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports, struct rte_cryptodev_config conf = { .nb_queue_pairs = 1, .socket_id = socket_id, + .ff_disable = RTE_CRYPTODEV_FF_SECURITY, }; rte_cryptodev_info_get(cdev_id, &dev_info); diff --git a/examples/vhost_crypto/main.c b/examples/vhost_crypto/main.c index cfb9dfda29..1d7ba94196 100644 --- a/examples/vhost_crypto/main.c +++ b/examples/vhost_crypto/main.c @@ -516,6 +516,7 @@ main(int argc, char *argv[]) config.nb_queue_pairs = dev_info.max_nb_queue_pairs; config.socket_id = rte_lcore_to_socket_id(lo->lcore_id); + config.ff_disable = RTE_CRYPTODEV_FF_SECURITY; ret = rte_cryptodev_configure(info->cid, &config); if (ret < 0) { diff --git a/lib/librte_cryptodev/Makefile b/lib/librte_cryptodev/Makefile index c20e090a8f..55d352a23a 100644 --- a/lib/librte_cryptodev/Makefile +++ b/lib/librte_cryptodev/Makefile @@ -7,7 +7,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_cryptodev.a # library version -LIBABIVER := 7 +LIBABIVER := 8 # build flags CFLAGS += -O3 diff --git a/lib/librte_cryptodev/meson.build b/lib/librte_cryptodev/meson.build index 9e009d4669..0a2275d75b 100644 --- a/lib/librte_cryptodev/meson.build +++ b/lib/librte_cryptodev/meson.build @@ -1,7 +1,7 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017-2019 Intel Corporation -version = 7 +version = 8 allow_experimental_apis = true sources = files('rte_cryptodev.c', 'rte_cryptodev_pmd.c') headers = files('rte_cryptodev.h', diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h index cb894ef63d..d701eea899 100644 --- a/lib/librte_cryptodev/rte_cryptodev.h +++ b/lib/librte_cryptodev/rte_cryptodev.h @@ -616,6 +616,13 @@ struct rte_cryptodev_config { int socket_id; /**< Socket to allocate resources on */ uint16_t nb_queue_pairs; /**< Number of queue pairs to configure on device */ + uint64_t ff_disable; + /**< Feature flags to be disabled. Only the following features are + * allowed to be disabled, + * - RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO + * - RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO + * - RTE_CRYTPODEV_FF_SECURITY + */ }; /** -- 2.20.1