Skip to content

Commit

Permalink
eventdev/crypto: support runtime set/get parameters
Browse files Browse the repository at this point in the history
The adapter runtime configuration parameters defined in the
struct rte_event_crypto_adapter_runtime_params can be configured
and retrieved using rte_event_crypto_adapter_runtime_params_set()
and rte_event_crypto_adapter_runtime_params_get() respectively.

Signed-off-by: Naga Harish K S V <s.v.naga.harish.k@intel.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
  • Loading branch information
svnagaha authored and jerinjacobk committed Feb 13, 2023
1 parent 1d176c7 commit 04ed18c
Show file tree
Hide file tree
Showing 5 changed files with 307 additions and 0 deletions.
109 changes: 109 additions & 0 deletions app/test/test_event_crypto_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,111 @@ test_crypto_adapter_stats(void)
return TEST_SUCCESS;
}

static int
test_crypto_adapter_params(void)
{
int err;
struct rte_event_crypto_adapter_runtime_params in_params;
struct rte_event_crypto_adapter_runtime_params out_params;
uint32_t cap;
struct rte_event_crypto_adapter_queue_conf queue_conf = {
.ev = response_info,
};

err = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap);
TEST_ASSERT_SUCCESS(err, "Failed to get adapter capabilities\n");

if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) {
err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID,
TEST_CDEV_ID, TEST_CDEV_QP_ID, &queue_conf);
} else
err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID,
TEST_CDEV_ID, TEST_CDEV_QP_ID, NULL);

TEST_ASSERT_SUCCESS(err, "Failed to add queue pair\n");

err = rte_event_crypto_adapter_runtime_params_init(&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
err = rte_event_crypto_adapter_runtime_params_init(&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

/* Case 1: Get the default value of mbufs processed by adapter */
err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

/* Case 2: Set max_nb = 32 (=BATCH_SEIZE) */
in_params.max_nb = 32;

err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID,
&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u",
in_params.max_nb, out_params.max_nb);

/* Case 3: Set max_nb = 192 */
in_params.max_nb = 192;

err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID,
&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u",
in_params.max_nb, out_params.max_nb);

/* Case 4: Set max_nb = 256 */
in_params.max_nb = 256;

err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID,
&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u",
in_params.max_nb, out_params.max_nb);

/* Case 5: Set max_nb = 30(<BATCH_SIZE) */
in_params.max_nb = 30;

err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID,
&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u",
in_params.max_nb, out_params.max_nb);

/* Case 6: Set max_nb = 512 */
in_params.max_nb = 512;

err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID,
&in_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);

err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID,
&out_params);
TEST_ASSERT(err == 0, "Expected 0 got %d", err);
TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u",
in_params.max_nb, out_params.max_nb);

err = rte_event_crypto_adapter_queue_pair_del(TEST_ADAPTER_ID,
TEST_CDEV_ID, TEST_CDEV_QP_ID);
TEST_ASSERT_SUCCESS(err, "Failed to delete add queue pair\n");

return TEST_SUCCESS;
}

static int
test_op_forward_mode(uint8_t session_less)
{
Expand Down Expand Up @@ -1454,6 +1559,10 @@ static struct unit_test_suite functional_testsuite = {
test_crypto_adapter_free,
test_crypto_adapter_stats),

TEST_CASE_ST(test_crypto_adapter_create,
test_crypto_adapter_free,
test_crypto_adapter_params),

TEST_CASE_ST(test_crypto_adapter_conf_op_forward_mode,
test_crypto_adapter_stop,
test_session_with_op_forward_mode),
Expand Down
9 changes: 9 additions & 0 deletions doc/guides/prog_guide/event_crypto_adapter.rst
Original file line number Diff line number Diff line change
Expand Up @@ -350,3 +350,12 @@ in struct ``rte_event_crypto_adapter_stats``. The received packet and
enqueued event counts are a sum of the counts from the eventdev PMD callbacks
if the callback is supported, and the counts maintained by the service function,
if one exists.

Set/Get adapter runtime configuration parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The runtime configuration parameters of adapter can be set/get using
``rte_event_crypto_adapter_runtime_params_set()`` and
``rte_event_crypto_adapter_runtime_params_get()`` respectively.
The parameters that can be set/get are defined in
``struct rte_event_crypto_adapter_runtime_params``.
101 changes: 101 additions & 0 deletions lib/eventdev/rte_event_crypto_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1335,6 +1335,107 @@ rte_event_crypto_adapter_stats_reset(uint8_t id)
return 0;
}

int
rte_event_crypto_adapter_runtime_params_init(
struct rte_event_crypto_adapter_runtime_params *params)
{
if (params == NULL)
return -EINVAL;

memset(params, 0, sizeof(*params));
params->max_nb = DEFAULT_MAX_NB;

return 0;
}

static int
crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
{
int ret;
uint32_t caps;

if (!adapter->nb_qps)
return -EINVAL;
ret = rte_event_crypto_adapter_caps_get(adapter->eventdev_id,
adapter->next_cdev_id,
&caps);
if (ret) {
RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8
" cdev %" PRIu8, adapter->eventdev_id,
adapter->next_cdev_id);
return ret;
}

if ((caps & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) ||
(caps & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
return -ENOTSUP;

return 0;
}

int
rte_event_crypto_adapter_runtime_params_set(uint8_t id,
struct rte_event_crypto_adapter_runtime_params *params)
{
struct event_crypto_adapter *adapter;
int ret;

if (eca_memzone_lookup())
return -ENOMEM;

EVENT_CRYPTO_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL);

if (params == NULL) {
RTE_EDEV_LOG_ERR("params pointer is NULL\n");
return -EINVAL;
}

adapter = eca_id_to_adapter(id);
if (adapter == NULL)
return -EINVAL;

ret = crypto_adapter_cap_check(adapter);
if (ret)
return ret;

rte_spinlock_lock(&adapter->lock);
adapter->max_nb = params->max_nb;
rte_spinlock_unlock(&adapter->lock);

return 0;
}

int
rte_event_crypto_adapter_runtime_params_get(uint8_t id,
struct rte_event_crypto_adapter_runtime_params *params)
{
struct event_crypto_adapter *adapter;
int ret;

if (eca_memzone_lookup())
return -ENOMEM;


EVENT_CRYPTO_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL);

if (params == NULL) {
RTE_EDEV_LOG_ERR("params pointer is NULL\n");
return -EINVAL;
}

adapter = eca_id_to_adapter(id);
if (adapter == NULL)
return -EINVAL;

ret = crypto_adapter_cap_check(adapter);
if (ret)
return ret;

params->max_nb = adapter->max_nb;

return 0;
}

int
rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id)
{
Expand Down
85 changes: 85 additions & 0 deletions lib/eventdev/rte_event_crypto_adapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@
* - rte_event_crypto_adapter_stop()
* - rte_event_crypto_adapter_stats_get()
* - rte_event_crypto_adapter_stats_reset()
* - rte_event_crypto_adapter_runtime_params_get()
* - rte_event_crypto_adapter_runtime_params_init()
* - rte_event_crypto_adapter_runtime_params_set()
* The application creates an instance using rte_event_crypto_adapter_create()
* or rte_event_crypto_adapter_create_ext().
Expand Down Expand Up @@ -253,6 +256,31 @@ struct rte_event_crypto_adapter_conf {
*/
};

/**
* Adapter runtime configuration parameters
*/
struct rte_event_crypto_adapter_runtime_params {
uint32_t max_nb;
/**< The adapter can return early if it has processed at least
* max_nb crypto ops. This isn't treated as a requirement; batching
* may cause the adapter to process more than max_nb crypto ops.
*
* rte_event_crypto_adapter_create() configures the
* adapter with default value of max_nb.
* rte_event_crypto_adapter_create_ext() configures the adapter with
* user provided value of max_nb through
* rte_event_crypto_adapter_conf::max_nb parameter.
* rte_event_cryptoadapter_runtime_params_set() allows to re-configure
* max_nb during runtime (after adding at least one queue pair)
*
* This is valid for the devices without
* RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD or
* RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW capability.
*/
uint32_t rsvd[15];
/**< Reserved fields for future expansion */
};

#define RTE_EVENT_CRYPTO_ADAPTER_EVENT_VECTOR 0x1
/**< This flag indicates that crypto operations processed on the crypto
* adapter need to be vectorized
Expand Down Expand Up @@ -608,6 +636,63 @@ rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id);
int
rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id);

/**
* Initialize the adapter runtime configuration parameters
*
* @param params
* A pointer to structure of type struct rte_event_crypto_adapter_runtime_params
*
* @return
* - 0: Success
* - <0: Error code on failure
*/
__rte_experimental
int
rte_event_crypto_adapter_runtime_params_init(
struct rte_event_crypto_adapter_runtime_params *params);

/**
* Set the adapter runtime configuration parameters
*
* @param id
* Adapter identifier
*
* @param params
* A pointer to structure of type struct rte_event_crypto_adapter_runtime_params
* with configuration parameter values. The reserved fields of this structure
* must be initialized to zero and the valid fields need to be set appropriately.
* This struct can be initialized using
* rte_event_crypto_adapter_runtime_params_init() API to default values or
* application may reset this struct and update required fields.
*
* @return
* - 0: Success
* - <0: Error code on failure
*/
__rte_experimental
int
rte_event_crypto_adapter_runtime_params_set(uint8_t id,
struct rte_event_crypto_adapter_runtime_params *params);

/**
* Get the adapter runtime configuration parameters
*
* @param id
* Adapter identifier
*
* @param[out] params
* A pointer to structure of type struct rte_event_crypto_adapter_runtime_params
* containing valid adapter parameters when return value is 0.
*
* @return
* - 0: Success
* - <0: Error code on failure
*/
__rte_experimental
int
rte_event_crypto_adapter_runtime_params_get(uint8_t id,
struct rte_event_crypto_adapter_runtime_params *params);

/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
Expand Down
3 changes: 3 additions & 0 deletions lib/eventdev/version.map
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ EXPERIMENTAL {
rte_event_eth_tx_adapter_queue_stop;

# added in 23.03
rte_event_crypto_adapter_runtime_params_get;
rte_event_crypto_adapter_runtime_params_init;
rte_event_crypto_adapter_runtime_params_set;
rte_event_eth_rx_adapter_runtime_params_get;
rte_event_eth_rx_adapter_runtime_params_init;
rte_event_eth_rx_adapter_runtime_params_set;
Expand Down

0 comments on commit 04ed18c

Please sign in to comment.