From patchwork Fri Aug 27 06:41:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gowrishankar Muthukrishnan X-Patchwork-Id: 97416 X-Patchwork-Delegate: jerinj@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 1065EA0C43; Fri, 27 Aug 2021 08:42:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3B011411BE; Fri, 27 Aug 2021 08:42:13 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 908BD411BE for ; Fri, 27 Aug 2021 08:42:11 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.1.2/8.16.0.43) with SMTP id 17QLNpMp005136; Thu, 26 Aug 2021 23:42:10 -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=YJgOLkk513MKq1u66qGUaQEi6JHXWp1DkDmNnHBCt8o=; b=dZaHE7Mq3rAKEmlzjzwrhBSCe2WuE7qy/eMgPq0W1H1pe6sSm1w3KnaYo1ebIH0kQ3iT AaBM3tbLNoYFD3AKzZPl+FmUnjPXjyRGhNHQV9lJ8AxA1SbDEuhWUujqjNkjE5tooJo5 MDNktdxS3Rv2QvYTBeEScb3WyA1mUGmYU1CDqr7c+oiagsNU+HyltbCk1PAE1x5YIFVC kjtyJ0SUg0pcVZ2HMIWimkqhxpbAWugdNK0X1Jb4qEBzAIgxuSpoF/STVvHJj3frtTAj wOngMoEanmXiMgObsoIuQkhNHjp66qyzFTyjOLzs7NydADRke6+nslJPz/fz8BnMrYxj Zw== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0b-0016f401.pphosted.com with ESMTP id 3ap92mv3d4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 26 Aug 2021 23:42:10 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Thu, 26 Aug 2021 23:42:08 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Thu, 26 Aug 2021 23:42:08 -0700 Received: from localhost.localdomain (unknown [10.28.34.38]) by maili.marvell.com (Postfix) with ESMTP id A405A3F705E; Thu, 26 Aug 2021 23:42:05 -0700 (PDT) From: Gowrishankar Muthukrishnan To: CC: , , , , , , , , Gowrishankar Muthukrishnan Date: Fri, 27 Aug 2021 12:11:58 +0530 Message-ID: <2416b1c92c3047c98e20d1548b62a1a1d5e3dbb0.1630046292.git.gmuthukrishn@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: h1RWQBnqxzGwZKQv-p5WO-QNwDanYtyy X-Proofpoint-GUID: h1RWQBnqxzGwZKQv-p5WO-QNwDanYtyy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.391,FMLib:17.0.607.475 definitions=2021-08-27_02,2021-08-26_02,2020-04-07_01 Subject: [dpdk-dev] [v5, 1/2] common/cnxk: add telemetry endpoints to npa 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 npa. Signed-off-by: Gowrishankar Muthukrishnan --- drivers/common/cnxk/cnxk_telemetry.h | 26 +++ drivers/common/cnxk/cnxk_telemetry_npa.c | 227 +++++++++++++++++++++++ drivers/common/cnxk/meson.build | 6 +- drivers/common/cnxk/roc_platform.h | 9 + 4 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 drivers/common/cnxk/cnxk_telemetry.h create mode 100644 drivers/common/cnxk/cnxk_telemetry_npa.c diff --git a/drivers/common/cnxk/cnxk_telemetry.h b/drivers/common/cnxk/cnxk_telemetry.h new file mode 100644 index 0000000000..1461fd893f --- /dev/null +++ b/drivers/common/cnxk/cnxk_telemetry.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2021 Marvell. + */ + +#ifndef __CNXK_TELEMETRY_H_ +#define __CNXK_TELEMETRY_H_ + +#define CNXK_TEL_STR(s) #s +#define CNXK_TEL_STR_PREFIX(s, p) CNXK_TEL_STR(p##s) +#define CNXK_TEL_DICT_INT(d, p, s, ...) \ + plt_tel_data_add_dict_int(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__), \ + (p)->s) +#define CNXK_TEL_DICT_PTR(d, p, s, ...) \ + plt_tel_data_add_dict_ptr(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__), \ + (void *)(p)->s) +#define CNXK_TEL_DICT_BF_PTR(d, p, s, ...) \ + plt_tel_data_add_dict_ptr(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__), \ + (void *)(uint64_t)(p)->s) +#define CNXK_TEL_DICT_U64(d, p, s, ...) \ + plt_tel_data_add_dict_u64(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__), \ + (p)->s) +#define CNXK_TEL_DICT_STR(d, p, s, ...) \ + plt_tel_data_add_dict_string(d, CNXK_TEL_STR_PREFIX(s, __VA_ARGS__), \ + (p)->s) + +#endif /* __CNXK_TELEMETRY_H_ */ diff --git a/drivers/common/cnxk/cnxk_telemetry_npa.c b/drivers/common/cnxk/cnxk_telemetry_npa.c new file mode 100644 index 0000000000..1c2c2cd106 --- /dev/null +++ b/drivers/common/cnxk/cnxk_telemetry_npa.c @@ -0,0 +1,227 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include "cnxk_telemetry.h" +#include "roc_api.h" +#include "roc_priv.h" + +#include + +static int +cnxk_tel_npa(struct plt_tel_data *d) +{ + struct npa_lf *lf; + int aura_cnt = 0; + uint32_t i; + + lf = idev_npa_obj_get(); + if (lf == NULL) + return NPA_ERR_DEVICE_NOT_BOUNDED; + + for (i = 0; i < lf->nr_pools; i++) { + if (plt_bitmap_get(lf->npa_bmp, i)) + continue; + aura_cnt++; + } + + plt_tel_data_add_dict_ptr(d, "npa", lf); + plt_tel_data_add_dict_int(d, "pf", dev_get_pf(lf->pf_func)); + plt_tel_data_add_dict_int(d, "vf", dev_get_vf(lf->pf_func)); + plt_tel_data_add_dict_int(d, "aura_cnt", aura_cnt); + + CNXK_TEL_DICT_PTR(d, lf, pci_dev); + CNXK_TEL_DICT_PTR(d, lf, npa_bmp); + CNXK_TEL_DICT_PTR(d, lf, npa_bmp_mem); + CNXK_TEL_DICT_PTR(d, lf, npa_qint_mem); + CNXK_TEL_DICT_PTR(d, lf, intr_handle); + CNXK_TEL_DICT_PTR(d, lf, mbox); + CNXK_TEL_DICT_PTR(d, lf, base); + CNXK_TEL_DICT_INT(d, lf, stack_pg_ptrs); + CNXK_TEL_DICT_INT(d, lf, stack_pg_bytes); + CNXK_TEL_DICT_INT(d, lf, npa_msixoff); + CNXK_TEL_DICT_INT(d, lf, nr_pools); + CNXK_TEL_DICT_INT(d, lf, pf_func); + CNXK_TEL_DICT_INT(d, lf, aura_sz); + CNXK_TEL_DICT_INT(d, lf, qints); + + return 0; +} + +static int +cnxk_tel_npa_aura(int aura_id, struct plt_tel_data *d) +{ + __io struct npa_aura_s *aura; + struct npa_aq_enq_req *req; + struct npa_aq_enq_rsp *rsp; + struct npa_lf *lf; + int rc; + + lf = idev_npa_obj_get(); + if (lf == NULL) + return NPA_ERR_DEVICE_NOT_BOUNDED; + + if (rte_bitmap_get(lf->npa_bmp, aura_id)) + return -1; + + req = mbox_alloc_msg_npa_aq_enq(lf->mbox); + if (!req) { + plt_err("Failed to alloc aq enq for npa"); + return -1; + } + + req->aura_id = aura_id; + req->ctype = NPA_AQ_CTYPE_AURA; + req->op = NPA_AQ_INSTOP_READ; + + rc = mbox_process_msg(lf->mbox, (void *)&rsp); + if (rc) { + plt_err("Failed to get pool(%d) context", aura_id); + return rc; + } + + aura = &rsp->aura; + CNXK_TEL_DICT_PTR(d, aura, pool_addr, w0_); + CNXK_TEL_DICT_INT(d, aura, ena, w1_); + CNXK_TEL_DICT_INT(d, aura, pool_caching, w1_); + CNXK_TEL_DICT_INT(d, aura, pool_way_mask, w1_); + CNXK_TEL_DICT_INT(d, aura, avg_con, w1_); + CNXK_TEL_DICT_INT(d, aura, pool_drop_ena, w1_); + CNXK_TEL_DICT_INT(d, aura, aura_drop_ena, w1_); + CNXK_TEL_DICT_INT(d, aura, bp_ena, w1_); + CNXK_TEL_DICT_INT(d, aura, aura_drop, w1_); + CNXK_TEL_DICT_INT(d, aura, avg_level, w1_); + CNXK_TEL_DICT_U64(d, aura, count, w2_); + CNXK_TEL_DICT_INT(d, aura, nix0_bpid, w2_); + CNXK_TEL_DICT_INT(d, aura, nix1_bpid, w2_); + CNXK_TEL_DICT_U64(d, aura, limit, w3_); + CNXK_TEL_DICT_INT(d, aura, bp, w3_); + CNXK_TEL_DICT_INT(d, aura, fc_ena, w3_); + CNXK_TEL_DICT_INT(d, aura, fc_up_crossing, w3_); + CNXK_TEL_DICT_INT(d, aura, fc_stype, w3_); + CNXK_TEL_DICT_INT(d, aura, fc_hyst_bits, w3_); + CNXK_TEL_DICT_INT(d, aura, fc_addr, w4_); + CNXK_TEL_DICT_INT(d, aura, pool_drop, w5_); + CNXK_TEL_DICT_INT(d, aura, update_time, w5_); + CNXK_TEL_DICT_INT(d, aura, err_int, w5_); + CNXK_TEL_DICT_INT(d, aura, err_int_ena, w5_); + CNXK_TEL_DICT_INT(d, aura, thresh_int, w5_); + CNXK_TEL_DICT_INT(d, aura, thresh_int_ena, w5_); + CNXK_TEL_DICT_INT(d, aura, thresh_up, w5_); + CNXK_TEL_DICT_INT(d, aura, thresh_qint_idx, w5_); + CNXK_TEL_DICT_INT(d, aura, err_qint_idx, w5_); + CNXK_TEL_DICT_U64(d, aura, thresh, w6_); + + return 0; +} + +static int +cnxk_tel_npa_pool(int pool_id, struct plt_tel_data *d) +{ + __io struct npa_pool_s *pool; + struct npa_aq_enq_req *req; + struct npa_aq_enq_rsp *rsp; + struct npa_lf *lf; + int rc; + + lf = idev_npa_obj_get(); + if (lf == NULL) + return NPA_ERR_DEVICE_NOT_BOUNDED; + + if (rte_bitmap_get(lf->npa_bmp, pool_id)) + return -1; + + req = mbox_alloc_msg_npa_aq_enq(lf->mbox); + if (!req) { + plt_err("Failed to alloc aq enq for npa"); + return -1; + } + + req->aura_id = pool_id; + req->ctype = NPA_AQ_CTYPE_POOL; + req->op = NPA_AQ_INSTOP_READ; + + rc = mbox_process_msg(lf->mbox, (void *)&rsp); + if (rc) { + plt_err("Failed to get pool(%d) context", pool_id); + return rc; + } + + pool = &rsp->pool; + CNXK_TEL_DICT_PTR(d, pool, stack_base, w0_); + CNXK_TEL_DICT_INT(d, pool, ena, w1_); + CNXK_TEL_DICT_INT(d, pool, nat_align, w1_); + CNXK_TEL_DICT_INT(d, pool, stack_caching, w1_); + CNXK_TEL_DICT_INT(d, pool, stack_way_mask, w1_); + CNXK_TEL_DICT_INT(d, pool, buf_offset, w1_); + CNXK_TEL_DICT_INT(d, pool, buf_size, w1_); + CNXK_TEL_DICT_INT(d, pool, stack_max_pages, w2_); + CNXK_TEL_DICT_INT(d, pool, stack_pages, w2_); + CNXK_TEL_DICT_INT(d, pool, op_pc, w3_); + CNXK_TEL_DICT_INT(d, pool, stack_offset, w4_); + CNXK_TEL_DICT_INT(d, pool, shift, w4_); + CNXK_TEL_DICT_INT(d, pool, avg_level, w4_); + CNXK_TEL_DICT_INT(d, pool, avg_con, w4_); + CNXK_TEL_DICT_INT(d, pool, fc_ena, w4_); + CNXK_TEL_DICT_INT(d, pool, fc_stype, w4_); + CNXK_TEL_DICT_INT(d, pool, fc_hyst_bits, w4_); + CNXK_TEL_DICT_INT(d, pool, fc_up_crossing, w4_); + CNXK_TEL_DICT_INT(d, pool, update_time, w4_); + CNXK_TEL_DICT_PTR(d, pool, fc_addr, w5_); + CNXK_TEL_DICT_PTR(d, pool, ptr_start, w6_); + CNXK_TEL_DICT_PTR(d, pool, ptr_end, w7_); + CNXK_TEL_DICT_INT(d, pool, err_int, w8_); + CNXK_TEL_DICT_INT(d, pool, err_int_ena, w8_); + CNXK_TEL_DICT_INT(d, pool, thresh_int, w8_); + CNXK_TEL_DICT_INT(d, pool, thresh_int_ena, w8_); + CNXK_TEL_DICT_INT(d, pool, thresh_up, w8_); + CNXK_TEL_DICT_INT(d, pool, thresh_qint_idx, w8_); + CNXK_TEL_DICT_INT(d, pool, err_qint_idx, w8_); + + return 0; +} + +static int +cnxk_npa_tel_handle_info(const char *cmd __rte_unused, + const char *params __rte_unused, + struct rte_tel_data *d) +{ + plt_tel_data_start_dict(d); + cnxk_tel_npa(d); + return 0; +} + +static int +cnxk_npa_tel_handle_info_x(const char *cmd, const char *params, + struct rte_tel_data *d) +{ + int id, rc; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -1; + + id = atoi(params); + plt_tel_data_start_dict(d); + + if (strstr(cmd, "aura/info")) + rc = cnxk_tel_npa_aura(id, d); + else + rc = cnxk_tel_npa_pool(id, d); + + return rc; +} + +RTE_INIT(cnxk_telemetry_npa_init) +{ + rte_telemetry_register_cmd( + "/cnxk/npa/info", cnxk_npa_tel_handle_info, + "Returns npa information. Takes no parameters"); + + rte_telemetry_register_cmd( + "/cnxk/npa/aura/info", cnxk_npa_tel_handle_info_x, + "Returns npa aura information. Parameters: aura_id"); + + rte_telemetry_register_cmd( + "/cnxk/npa/pool/info", cnxk_npa_tel_handle_info_x, + "Returns npa pool information. Parameters: pool_id"); +} diff --git a/drivers/common/cnxk/meson.build b/drivers/common/cnxk/meson.build index 6a7849f31c..6fdb5451cb 100644 --- a/drivers/common/cnxk/meson.build +++ b/drivers/common/cnxk/meson.build @@ -60,5 +60,7 @@ sources = files( # Security common code sources += files('cnxk_security.c') -includes += include_directories('../../bus/pci') -includes += include_directories('../../../lib/net') +# Telemetry common code +sources += files('cnxk_telemetry_npa.c') + +deps += ['bus_pci', 'net', 'telemetry'] diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h index 285b24b82d..57b1229bb8 100644 --- a/drivers/common/cnxk/roc_platform.h +++ b/drivers/common/cnxk/roc_platform.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "roc_bits.h" @@ -139,6 +140,14 @@ #define plt_strlcpy rte_strlcpy +#define plt_tel_data rte_tel_data +#define plt_tel_data_start_dict rte_tel_data_start_dict +#define plt_tel_data_add_dict_int rte_tel_data_add_dict_int +#define plt_tel_data_add_dict_ptr(d, n, v) \ + rte_tel_data_add_dict_u64(d, n, (uint64_t)v) +#define plt_tel_data_add_dict_string rte_tel_data_add_dict_string +#define plt_tel_data_add_dict_u64 rte_tel_data_add_dict_u64 + /* Log */ extern int cnxk_logtype_base; extern int cnxk_logtype_mbox; From patchwork Fri Aug 27 06:41: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: 97417 X-Patchwork-Delegate: jerinj@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 A216CA0C43; Fri, 27 Aug 2021 08:42:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6DD9841249; Fri, 27 Aug 2021 08:42:15 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 0DE9E4121F for ; Fri, 27 Aug 2021 08:42:13 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.1.2/8.16.0.43) with SMTP id 17R3s37B012747; Thu, 26 Aug 2021 23:42:13 -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=YCkb7k6ihP50LGAh8wWFWp27i+xlUW7XZrY8R0FvwmE=; b=hBysk5Wi4j+VDrFVn855hlqeOoo2fqe/5MSwIcuisFVvlnMbdXrquKrvRWpXZ9DWiRXW RYRyaQKle7+WYXLm0iEDfwgluNV/7nTARftR5/yp7X5trwddSuv5En2odOhpjbS9VGCR XO3TgODeBrdvEi7keh+jgBvDI9sdlNfxNcYe9DmcsT6z6o64yBe+aOJ9rb7wWNTFk4zY dMrkCeRp83ynmq5O3ETkLrjaw4qqqQI9qo+quA7kHBduFj2siI1JzvLhnJNizdLyn5GJ Z1G8KEihgfOp9VVNhHU+b7t0pPUqAzlGcWxTkKHt/cVm5nV5HO5VSv09G3ZO5kLnd859 Mw== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com with ESMTP id 3aprj60g4w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 26 Aug 2021 23:42:13 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Thu, 26 Aug 2021 23:42:11 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Thu, 26 Aug 2021 23:42:11 -0700 Received: from localhost.localdomain (unknown [10.28.34.38]) by maili.marvell.com (Postfix) with ESMTP id EDC675B692B; Thu, 26 Aug 2021 23:42:08 -0700 (PDT) From: Gowrishankar Muthukrishnan To: CC: , , , , , , , , Gowrishankar Muthukrishnan Date: Fri, 27 Aug 2021 12:11:59 +0530 Message-ID: <62f65b58824532acbb53784d64ef260d5c9c90a1.1630046292.git.gmuthukrishn@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: 2pIQyHM0dAUmbSAYn_Qy28nxkvqL9HGD X-Proofpoint-GUID: 2pIQyHM0dAUmbSAYn_Qy28nxkvqL9HGD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.391,FMLib:17.0.607.475 definitions=2021-08-27_02,2021-08-26_02,2020-04-07_01 Subject: [dpdk-dev] [v5, 2/2] mempool/cnxk: add telemetry end points 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" Adding telemetry end points to cnxk mempool driver. Signed-off-by: Gowrishankar Muthukrishnan --- drivers/mempool/cnxk/cnxk_mempool_telemetry.c | 100 ++++++++++++++++++ drivers/mempool/cnxk/meson.build | 3 +- 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 drivers/mempool/cnxk/cnxk_mempool_telemetry.c diff --git a/drivers/mempool/cnxk/cnxk_mempool_telemetry.c b/drivers/mempool/cnxk/cnxk_mempool_telemetry.c new file mode 100644 index 0000000000..690f557f62 --- /dev/null +++ b/drivers/mempool/cnxk/cnxk_mempool_telemetry.c @@ -0,0 +1,100 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include +#include +#include + +#include + +#include "cnxk_mempool.h" +#include "cnxk_telemetry.h" + +static void +mempool_list_cb(struct rte_mempool *mp, void *arg) +{ + struct rte_tel_data *d = (struct rte_tel_data *)arg; + + rte_tel_data_add_array_string(d, mp->name); +} + +static int +mempool_tel_handle_list(const char *cmd __rte_unused, + const char *params __rte_unused, struct rte_tel_data *d) +{ + rte_tel_data_start_array(d, RTE_TEL_STRING_VAL); + rte_mempool_walk(mempool_list_cb, d); + return 0; +} + +struct mempool_info_cb_arg { + char *pool_name; + struct rte_tel_data *d; +}; + +static void +mempool_info_cb(struct rte_mempool *mp, void *arg) +{ + struct mempool_info_cb_arg *info = (struct mempool_info_cb_arg *)arg; + const struct rte_memzone *mz; + int aura_id; + + if (strncmp(mp->name, info->pool_name, RTE_MEMZONE_NAMESIZE)) + return; + + CNXK_TEL_DICT_STR(info->d, mp, name); + CNXK_TEL_DICT_INT(info->d, mp, pool_id); + CNXK_TEL_DICT_INT(info->d, mp, flags); + CNXK_TEL_DICT_INT(info->d, mp, socket_id); + CNXK_TEL_DICT_INT(info->d, mp, size); + CNXK_TEL_DICT_INT(info->d, mp, cache_size); + CNXK_TEL_DICT_INT(info->d, mp, elt_size); + CNXK_TEL_DICT_INT(info->d, mp, header_size); + CNXK_TEL_DICT_INT(info->d, mp, trailer_size); + CNXK_TEL_DICT_INT(info->d, mp, private_data_size); + CNXK_TEL_DICT_INT(info->d, mp, ops_index); + CNXK_TEL_DICT_INT(info->d, mp, populated_size); + + aura_id = roc_npa_aura_handle_to_aura(mp->pool_id); + rte_tel_data_add_dict_int(info->d, "aura_id", aura_id); + + mz = mp->mz; + CNXK_TEL_DICT_STR(info->d, mz, name, mz_); + CNXK_TEL_DICT_PTR(info->d, mz, iova, mz_); + CNXK_TEL_DICT_PTR(info->d, mz, addr, mz_); + CNXK_TEL_DICT_INT(info->d, mz, len, mz_); + CNXK_TEL_DICT_U64(info->d, mz, hugepage_sz, mz_); + CNXK_TEL_DICT_INT(info->d, mz, socket_id, mz_); + CNXK_TEL_DICT_INT(info->d, mz, flags, mz_); +} + +static int +mempool_tel_handle_info(const char *cmd __rte_unused, const char *params, + struct rte_tel_data *d) +{ + struct mempool_info_cb_arg mp_arg; + char name[RTE_MEMZONE_NAMESIZE]; + + if (params == NULL || strlen(params) == 0) + return -1; + + rte_strlcpy(name, params, RTE_MEMZONE_NAMESIZE); + + rte_tel_data_start_dict(d); + mp_arg.pool_name = name; + mp_arg.d = d; + rte_mempool_walk(mempool_info_cb, &mp_arg); + + return 0; +} + +RTE_INIT(cnxk_mempool_init_telemetry) +{ + rte_telemetry_register_cmd( + "/cnxk/mempool/list", mempool_tel_handle_list, + "Returns list of available mempools. Takes no parameters"); + rte_telemetry_register_cmd( + "/cnxk/mempool/info", mempool_tel_handle_info, + "Returns mempool info. Parameters: pool_name"); +} diff --git a/drivers/mempool/cnxk/meson.build b/drivers/mempool/cnxk/meson.build index e28a9e044d..7834a19118 100644 --- a/drivers/mempool/cnxk/meson.build +++ b/drivers/mempool/cnxk/meson.build @@ -11,8 +11,9 @@ endif sources = files( 'cnxk_mempool.c', 'cnxk_mempool_ops.c', + 'cnxk_mempool_telemetry.c', 'cn9k_mempool_ops.c', 'cn10k_mempool_ops.c', ) -deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool'] +deps += ['eal', 'mbuf', 'kvargs', 'bus_pci', 'common_cnxk', 'mempool', 'telemetry']