From patchwork Wed Jun 8 11:58:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Etelson X-Patchwork-Id: 112554 X-Patchwork-Delegate: rasland@nvidia.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 1E698A04FD; Wed, 8 Jun 2022 13:58:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1290040689; Wed, 8 Jun 2022 13:58:49 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2048.outbound.protection.outlook.com [40.107.92.48]) by mails.dpdk.org (Postfix) with ESMTP id BC67A4021D for ; Wed, 8 Jun 2022 13:58:47 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CJag+JPDGrZqGgUAak4jmN4rIXH340BkcdxANkJR3kS/yCCwjx0XCQu+6QROWSR6d6sQupiNZhiYHETxdK5qpIU/QMwnGWObgEpemg1Val2okElYhnWXtwi0fhOGByylAUB5+Le9/sgVfwiE/kJkTAtBQcqsjgd4KJZgU1tt9CzMfUXyq7zzcCVudib1TiDrldVpNgmM2ImwlWGRW9HOokRYIWE5is/5VylLAesbE4yiDvpjLRJsYsRHuwhkFfA//mv1H9kk/lZT+saAUhHdH/FDBHcVcMDgk2Z7QTCRzH5mQgGz1xtnqy4Bayxt6lNeRLySlLS0Q81wTomeavbpjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bgDfcPExyJvDyAi25ewUMqcMn05rBofmXNCAUQH1We0=; b=ZveAzXkqE2vUgD6qBZz/yI7YuLV1A9UOmaB69SojlF7W1mYVO8glL4WLAGqsUUeLaIIyHiwhPc6NNUYsIPNvpaxvGBof+b3jSQNBG76AdTsDDhLfasQCr8VTxzqf/+YegvolccKRXdKPHzuNeXSAkoEeMzlcuL4ObOfOaHwFkbW9Lc5HX4DE8PyZJVtzgdujH6OxelpOHjZfvsH7T1IUD/qqQWDhjzOtUctqls4TCeAMgHLkX7L3W5IJ2PJ9KWsGqRBC5aQ5Y5hV0BT2OfIt9OYdFOdZqoBoMbbDBfPD6xljhoudI2WJKLnGcYPLcpzP9Ap6MCuK9h7BOvG82C4BEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.238) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bgDfcPExyJvDyAi25ewUMqcMn05rBofmXNCAUQH1We0=; b=TY5wnZPgei6odTDVqGEJ2sYXhluSgeXJC9kC3bI4fC4L20pzw86OrnThFc7YtUWG0Wq7avMHUBpLPhgv1YhSpvg+If7OA5Y4qJQbIi9S8wDQR+02e0tA8z3ykWH7c1Rp2tJ8KII1cTqvPTnattYVvH3rFCI/ZBIYgFw+9XZJtEGW+Kj2DFqRhOGlhYZRZMrBT8GOhm6L6t2P/DaGcUFuEUmJWQsZx0Ds2UCvejclrMAOjbXiKU6I8WbsbsqCL35tV36sVYWpgPzD2lELk6HOVariVpPx6yvSrXllqDPZBIMBRQXPMJtwdZchP1WKJSLKdK4mCcakAGhRBQ59tTRuUg== Received: from MW4PR02CA0021.namprd02.prod.outlook.com (2603:10b6:303:16d::31) by MWHPR12MB1216.namprd12.prod.outlook.com (2603:10b6:300:10::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Wed, 8 Jun 2022 11:58:46 +0000 Received: from CO1NAM11FT053.eop-nam11.prod.protection.outlook.com (2603:10b6:303:16d:cafe::fb) by MW4PR02CA0021.outlook.office365.com (2603:10b6:303:16d::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.12 via Frontend Transport; Wed, 8 Jun 2022 11:58:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.238) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.238 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.238; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (12.22.5.238) by CO1NAM11FT053.mail.protection.outlook.com (10.13.175.63) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5314.12 via Frontend Transport; Wed, 8 Jun 2022 11:58:45 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by DRHQMAIL105.nvidia.com (10.27.9.14) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Wed, 8 Jun 2022 11:58:45 +0000 Received: from nvidia.com (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Wed, 8 Jun 2022 04:58:43 -0700 From: Gregory Etelson To: , CC: , Matan Azrad , Viacheslav Ovsiienko Subject: [PATCH 1/2] common/mlx5: update log format after devx_general_cmd error Date: Wed, 8 Jun 2022 14:58:25 +0300 Message-ID: <20220608115826.11783-1-getelson@nvidia.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ad2c07a1-0a92-4f75-a79b-08da49463dc5 X-MS-TrafficTypeDiagnostic: MWHPR12MB1216:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 974NryV1ca3UXUEZEtMPPoHynG0vHf8qAJF88h1SgsWcP+hwduullW9COKLmD8EZglbq6QAM63uM31aYKrHP8VzJUKRpJAOl8iARP7iAmrkpxM7hPLBG7wCJ+RwKnzMZiNkJag7hovsEhOaijZIPY3FV0juhQrUopTmZ+OArbK3vSosSh2TwdpjvXpDPjL4jbW6JwImdxK1fFKbpltKW5gajz14WeDxxSFmubET/WskjOzt6xaRiSge7cxuk8r8f8PqRmt6r5JqZl7NzdZTMKf/YQ6NqmCIn90DT/UOJlt6pl0eeAWj4a4j1q77oHL9vuEEKWyNASAawOmvriCcMdsz1IKNxPVk8b/69zNgL3kr8FgSYMLV6mU5kWgL3p5ty163YcUNVul5Qr9PiKrbRI1bcUdAld1Enu+Nt0lt5qhOz0DL6Oui0zX21nj6WJ1wCsLg8GZIjF7DaRumwEeXf62kEcHHv9UjfDYiIQFKiG718SQz6zixswT6HbMSoB4IOUqGtHLHqyKPcQieyE1bvteUbk0mjGWXeCfoV9mi5eeDK5KFLkz4DYkTmws+yJVm2wIgf9AVnva1TJo13RY6CEPgyJoQlDv6y8jsG5UmBcJseKJ0fpYHCZvdDTTn40BJCOfPQ3Ew/zODd45xEzEvqcdj1sJD6OreHSvY9N9WW7PbcK71ALku3eezUYOdxmI8+ggTTZjSzjzK6nK9Mw/xGpA== X-Forefront-Antispam-Report: CIP:12.22.5.238; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:InfoNoRecords; CAT:NONE; SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(107886003)(40460700003)(83380400001)(8936002)(36756003)(81166007)(1076003)(336012)(186003)(6666004)(47076005)(356005)(54906003)(508600001)(426003)(26005)(5660300002)(55016003)(2616005)(8676002)(16526019)(4326008)(36860700001)(110136005)(316002)(82310400005)(6286002)(70586007)(7049001)(70206006)(86362001)(2906002)(15650500001)(7696005)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2022 11:58:45.8154 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ad2c07a1-0a92-4f75-a79b-08da49463dc5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[12.22.5.238]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT053.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1216 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 Application can fetch syndrome value after FW operation failure starting from Mellanox OFED-5.6. The patch updates log data issued after devx_general_cmd error. Signed-off-by: Gregory Etelson Acked-by: Matan Azrad --- drivers/common/mlx5/mlx5_devx_cmds.c | 103 ++++++++++++--------------- 1 file changed, 44 insertions(+), 59 deletions(-) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index c6bdbc12bb..bc06aeccc7 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -13,39 +13,49 @@ #include "mlx5_common_log.h" #include "mlx5_malloc.h" +/* FW writes status value to the OUT buffer at offset 00H */ +#define MLX5_FW_STATUS(o) MLX5_GET(general_obj_out_cmd_hdr, (o), status) +/* FW writes syndrome value to the OUT buffer at offset 04H */ +#define MLX5_FW_SYNDROME(o) MLX5_GET(general_obj_out_cmd_hdr, (o), syndrome) + +#define MLX5_DEVX_ERR_RC(x) ((x) > 0 ? -(x) : ((x) < 0 ? (x) : -1)) + +static void +mlx5_devx_err_log(void *out, const char *reason, + const char *param, uint32_t value) +{ + rte_errno = errno; + if (!param) + DRV_LOG(ERR, "DevX %s failed errno=%d status=%#x syndrome=%#x", + reason, errno, MLX5_FW_STATUS(out), + MLX5_FW_SYNDROME(out)); + else + DRV_LOG(ERR, "DevX %s %s=%#X failed errno=%d status=%#x syndrome=%#x", + reason, param, value, errno, MLX5_FW_STATUS(out), + MLX5_FW_SYNDROME(out)); +} + static void * mlx5_devx_get_hca_cap(void *ctx, uint32_t *in, uint32_t *out, int *err, uint32_t flags) { const size_t size_in = MLX5_ST_SZ_DW(query_hca_cap_in) * sizeof(int); const size_t size_out = MLX5_ST_SZ_DW(query_hca_cap_out) * sizeof(int); - int status, syndrome, rc; + int rc; - if (err) - *err = 0; memset(in, 0, size_in); memset(out, 0, size_out); MLX5_SET(query_hca_cap_in, in, opcode, MLX5_CMD_OP_QUERY_HCA_CAP); MLX5_SET(query_hca_cap_in, in, op_mod, flags); rc = mlx5_glue->devx_general_cmd(ctx, in, size_in, out, size_out); - if (rc) { - DRV_LOG(ERR, - "Failed to query devx HCA capabilities func %#02x", - flags >> 1); + if (rc || MLX5_FW_STATUS(out)) { + mlx5_devx_err_log(out, "HCA capabilities", "func", flags >> 1); if (err) - *err = rc > 0 ? -rc : rc; - return NULL; - } - status = MLX5_GET(query_hca_cap_out, out, status); - syndrome = MLX5_GET(query_hca_cap_out, out, syndrome); - if (status) { - DRV_LOG(ERR, - "Failed to query devx HCA capabilities func %#02x status %x, syndrome = %x", - flags >> 1, status, syndrome); - if (err) - *err = -1; + *err = MLX5_DEVX_ERR_RC(rc); return NULL; } + if (err) + *err = 0; return MLX5_ADDR_OF(query_hca_cap_out, out, capability); } @@ -74,7 +84,7 @@ mlx5_devx_cmd_register_read(void *ctx, uint16_t reg_id, uint32_t arg, uint32_t in[MLX5_ST_SZ_DW(access_register_in)] = {0}; uint32_t out[MLX5_ST_SZ_DW(access_register_out) + MLX5_ACCESS_REGISTER_DATA_DWORD_MAX] = {0}; - int status, rc; + int rc; MLX5_ASSERT(data && dw_cnt); MLX5_ASSERT(dw_cnt <= MLX5_ACCESS_REGISTER_DATA_DWORD_MAX); @@ -91,23 +101,13 @@ mlx5_devx_cmd_register_read(void *ctx, uint16_t reg_id, uint32_t arg, rc = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, MLX5_ST_SZ_BYTES(access_register_out) + sizeof(uint32_t) * dw_cnt); - if (rc) - goto error; - status = MLX5_GET(access_register_out, out, status); - if (status) { - int syndrome = MLX5_GET(access_register_out, out, syndrome); - - DRV_LOG(DEBUG, "Failed to read access NIC register 0x%X, " - "status %x, syndrome = %x", - reg_id, status, syndrome); - return -1; + if (rc || MLX5_FW_STATUS(out)) { + mlx5_devx_err_log(out, "read access", "NIC register", reg_id); + return MLX5_DEVX_ERR_RC(rc); } memcpy(data, &out[MLX5_ST_SZ_DW(access_register_out)], dw_cnt * sizeof(uint32_t)); return 0; -error: - rc = (rc > 0) ? -rc : rc; - return rc; } /** @@ -134,7 +134,7 @@ mlx5_devx_cmd_register_write(void *ctx, uint16_t reg_id, uint32_t arg, uint32_t in[MLX5_ST_SZ_DW(access_register_in) + MLX5_ACCESS_REGISTER_DATA_DWORD_MAX] = {0}; uint32_t out[MLX5_ST_SZ_DW(access_register_out)] = {0}; - int status, rc; + int rc; void *ptr; MLX5_ASSERT(data && dw_cnt); @@ -152,26 +152,19 @@ mlx5_devx_cmd_register_write(void *ctx, uint16_t reg_id, uint32_t arg, ptr = MLX5_ADDR_OF(access_register_in, in, register_data); memcpy(ptr, data, dw_cnt * sizeof(uint32_t)); rc = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, sizeof(out)); - + if (rc || MLX5_FW_STATUS(out)) { + mlx5_devx_err_log(out, "write access", "NIC register", reg_id); + return MLX5_DEVX_ERR_RC(rc); + } rc = mlx5_glue->devx_general_cmd(ctx, in, MLX5_ST_SZ_BYTES(access_register_in) + dw_cnt * sizeof(uint32_t), out, sizeof(out)); - if (rc) - goto error; - status = MLX5_GET(access_register_out, out, status); - if (status) { - int syndrome = MLX5_GET(access_register_out, out, syndrome); - - DRV_LOG(DEBUG, "Failed to write access NIC register 0x%X, " - "status %x, syndrome = %x", - reg_id, status, syndrome); - return -1; + if (rc || MLX5_FW_STATUS(out)) { + mlx5_devx_err_log(out, "write access", "NIC register", reg_id); + return MLX5_DEVX_ERR_RC(rc); } return 0; -error: - rc = (rc > 0) ? -rc : rc; - return rc; } /** @@ -466,7 +459,7 @@ mlx5_devx_cmd_query_nic_vport_context(void *ctx, uint32_t in[MLX5_ST_SZ_DW(query_nic_vport_context_in)] = {0}; uint32_t out[MLX5_ST_SZ_DW(query_nic_vport_context_out)] = {0}; void *vctx; - int status, syndrome, rc; + int rc; /* Query NIC vport context to determine inline mode. */ MLX5_SET(query_nic_vport_context_in, in, opcode, @@ -477,23 +470,15 @@ mlx5_devx_cmd_query_nic_vport_context(void *ctx, rc = mlx5_glue->devx_general_cmd(ctx, in, sizeof(in), out, sizeof(out)); - if (rc) - goto error; - status = MLX5_GET(query_nic_vport_context_out, out, status); - syndrome = MLX5_GET(query_nic_vport_context_out, out, syndrome); - if (status) { - DRV_LOG(DEBUG, "Failed to query NIC vport context, " - "status %x, syndrome = %x", status, syndrome); - return -1; + if (rc || MLX5_FW_STATUS(out)) { + mlx5_devx_err_log(out, "query NIC vport context", NULL, 0); + return MLX5_DEVX_ERR_RC(rc); } vctx = MLX5_ADDR_OF(query_nic_vport_context_out, out, nic_vport_context); attr->vport_inline_mode = MLX5_GET(nic_vport_context, vctx, min_wqe_inline_mode); return 0; -error: - rc = (rc > 0) ? -rc : rc; - return rc; } /**