From patchwork Fri Oct 22 16:02:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gowrishankar Muthukrishnan X-Patchwork-Id: 102681 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4FBDFA0C43; Fri, 22 Oct 2021 18:03:11 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BDAB7410DF; Fri, 22 Oct 2021 18:03:10 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 475B34003E for ; Fri, 22 Oct 2021 18:03:09 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 19M9qGDv011047 for ; Fri, 22 Oct 2021 09:03:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=n4J1SC7Psh4fVrPX1RFk++i3Ewiajnuv8gD8eXmvvsI=; b=CJ/pXvqyO2IKTYjza28xzd1QK8BuxGfqjgt7g6ZmoDZqDUA+7jhjmnaUsMcbNyQGspla k850Y/a+SK6e7HSwrj/e+PCb3Z0Qk2S6MSHzIHOiLuMmXx+s30HQ8HsIiepNsAwzV1nM 80GW7QasAt3mjMYdooqi7ScQV97W8mebZeFNcbU0GdhYFWHeUgB4HI/KBmEdG7GOy6va 4WusIIKBMGyjVmsKVlHBZ0KFV0j3qN1V2RC1zr38e58tMoIrxu79xM5f6GQXeOabdGYd csoiA5aREAJ47DMQEBk1DSMg4yZaU5ZeESC/DK75lavgUelBUBGeEkr9YlLHBQ8RE8zA kA== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com with ESMTP id 3buu23sbrp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Fri, 22 Oct 2021 09:03:08 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Fri, 22 Oct 2021 09:03:06 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Fri, 22 Oct 2021 09:03:06 -0700 Received: from localhost.localdomain (unknown [10.28.34.38]) by maili.marvell.com (Postfix) with ESMTP id 8B4383F707D; Fri, 22 Oct 2021 09:03:04 -0700 (PDT) From: Gowrishankar Muthukrishnan To: CC: , , , , , Gowrishankar Muthukrishnan Date: Fri, 22 Oct 2021 21:32:59 +0530 Message-ID: <356e594a0bccf58aa3646f72245a2bf0d3c0dfe2.1634918403.git.gmuthukrishn@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Proofpoint-GUID: 47gzLo8pBqBM5N77qyFKmr7oy-iEPUzB X-Proofpoint-ORIG-GUID: 47gzLo8pBqBM5N77qyFKmr7oy-iEPUzB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-10-22_04,2021-10-22_01,2020-04-07_01 Subject: [dpdk-dev] [v7] crypto/cnxk: add telemetry endpoints to cryptodev X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add telemetry endpoints to cryptodev. Signed-off-by: Gowrishankar Muthukrishnan --- Depends-on: patch-19601 ("cryptodev: add telemetry callbacks") Depends-on: patch-19915 ("cryptodev: add telemetry endpoint for cryptodev capabilities") v7: - compilation issue in CI fixed --- .../crypto/cnxk/cnxk_cryptodev_telemetry.c | 121 ++++++++++++++++++ drivers/crypto/cnxk/meson.build | 1 + 2 files changed, 122 insertions(+) create mode 100644 drivers/crypto/cnxk/cnxk_cryptodev_telemetry.c diff --git a/drivers/crypto/cnxk/cnxk_cryptodev_telemetry.c b/drivers/crypto/cnxk/cnxk_cryptodev_telemetry.c new file mode 100644 index 0000000000..a1eccffe33 --- /dev/null +++ b/drivers/crypto/cnxk/cnxk_cryptodev_telemetry.c @@ -0,0 +1,121 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include +#include +#include + +#include + +#include "cnxk_cryptodev.h" + +#define CRYPTO_CAPS_SZ \ + (RTE_ALIGN_CEIL(sizeof(struct rte_cryptodev_capabilities), \ + sizeof(uint64_t)) / \ + sizeof(uint64_t)) + +#define SEC_CAPS_SZ \ + (RTE_ALIGN_CEIL(sizeof(struct rte_security_capability), \ + sizeof(uint64_t)) / \ + sizeof(uint64_t)) + +static int +crypto_caps_array(struct rte_tel_data *d, + struct rte_cryptodev_capabilities *dev_caps, + size_t dev_caps_n) +{ + union caps_u { + struct rte_cryptodev_capabilities dev_caps; + uint64_t val[CRYPTO_CAPS_SZ]; + } caps; + unsigned int i, j, n = 0; + + rte_tel_data_start_array(d, RTE_TEL_U64_VAL); + + for (i = 0; i < dev_caps_n; i++) { + if (dev_caps[i].op == RTE_CRYPTO_OP_TYPE_UNDEFINED) + break; + + memset(&caps, 0, sizeof(caps)); + rte_memcpy(&caps.dev_caps, &dev_caps[i], sizeof(dev_caps[0])); + for (j = 0; j < CRYPTO_CAPS_SZ; j++) + rte_tel_data_add_array_u64(d, caps.val[j]); + ++n; + } + + return n; +} + +static int +sec_caps_array(struct rte_tel_data *d, struct rte_security_capability *dev_caps, + size_t dev_caps_n) +{ + union caps_u { + struct rte_security_capability dev_caps; + uint64_t val[SEC_CAPS_SZ]; + } caps; + unsigned int i, j, n = 0; + + rte_tel_data_start_array(d, RTE_TEL_U64_VAL); + + for (i = 0; i < dev_caps_n; i++) { + memset(&caps, 0, sizeof(caps)); + rte_memcpy(&caps.dev_caps, &dev_caps[i], sizeof(dev_caps[0])); + for (j = 0; j < SEC_CAPS_SZ; j++) + rte_tel_data_add_array_u64(d, caps.val[j]); + ++n; + } + + return n; +} + +static int +cryptodev_tel_handle_caps(const char *cmd __rte_unused, const char *params, + struct rte_tel_data *d) +{ + struct rte_tel_data *sec_crypto_caps, *sec_caps; + int sec_crypto_caps_n, sec_caps_n; + struct rte_cryptodev *dev; + struct cnxk_cpt_vf *vf; + int dev_id; + + if (!params || strlen(params) == 0 || !isdigit(*params)) + return -EINVAL; + + dev_id = strtol(params, NULL, 10); + if (!rte_cryptodev_is_valid_dev(dev_id)) + return -EINVAL; + + dev = rte_cryptodev_pmd_get_dev(dev_id); + if (!dev) { + plt_err("No cryptodev for id %d available", dev_id); + return -EINVAL; + } + + vf = dev->data->dev_private; + rte_tel_data_start_dict(d); + + /* Security Crypto capabilities */ + sec_crypto_caps = rte_tel_data_alloc(); + sec_crypto_caps_n = crypto_caps_array( + sec_crypto_caps, vf->sec_crypto_caps, CNXK_SEC_CRYPTO_MAX_CAPS); + rte_tel_data_add_dict_container(d, "sec_crypto_caps", sec_crypto_caps, + 0); + rte_tel_data_add_dict_int(d, "sec_crypto_caps_n", sec_crypto_caps_n); + + /* Security capabilities */ + sec_caps = rte_tel_data_alloc(); + sec_caps_n = sec_caps_array(sec_caps, vf->sec_caps, CNXK_SEC_MAX_CAPS); + rte_tel_data_add_dict_container(d, "sec_caps", sec_caps, 0); + rte_tel_data_add_dict_int(d, "sec_caps_n", sec_caps_n); + + return 0; +} + +RTE_INIT(cnxk_cryptodev_init_telemetry) +{ + rte_telemetry_register_cmd( + "/cnxk/cryptodev/caps", cryptodev_tel_handle_caps, + "Returns cryptodev capabilities. Parameters: int dev_id"); +} diff --git a/drivers/crypto/cnxk/meson.build b/drivers/crypto/cnxk/meson.build index 024109f7e9..2d78757bba 100644 --- a/drivers/crypto/cnxk/meson.build +++ b/drivers/crypto/cnxk/meson.build @@ -20,6 +20,7 @@ sources = files( 'cnxk_cryptodev_devargs.c', 'cnxk_cryptodev_ops.c', 'cnxk_cryptodev_sec.c', + 'cnxk_cryptodev_telemetry.c', ) deps += ['bus_pci', 'common_cnxk', 'security', 'eventdev']