From patchwork Tue Nov 22 12:53:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dariusz Sosnowski X-Patchwork-Id: 120091 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 967AEA0582; Tue, 22 Nov 2022 13:54:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3880442D5F; Tue, 22 Nov 2022 13:54:12 +0100 (CET) Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2059.outbound.protection.outlook.com [40.107.102.59]) by mails.dpdk.org (Postfix) with ESMTP id 69EEF427EB for ; Tue, 22 Nov 2022 13:54:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X85u5mDH79N/x/E+y+SVFhHl5hlvPBLItZAjhiy3RoxsgWOPSvYKOw4DIWtRzOHmXA61WJhv31S4tsCGZlLSIqxBx0iL9Ep/eAZXx4igT51GI7286l4k9UrkU6h2tGfWUmSqisdwA4gbR7z7rPuiBHo5a048Zck72FkTSXZB0sxLYw5z2DKBRsvWu6YvGCtqfX8KRBStDN9BIXZJFmasvN3jQrmoDRs6P4kqBQfCyZ8oEKh/lTmt1ujHlFxlykZ4DPY4x7rOj7KRChm/RZRiVAy19tHpgpQfFXyhnhWKJuCWXxmZSRI2o639QS5eQ0j2CYjfPDTeWV38nyYV/ueUVw== 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=ggnANSwwb08n2tU8fpqxA/Iqk6GcGUrCFqdVug2BQd0=; b=c1S0Y4m4Aoy2gR2m08xL3AdF7g8evdh9B12/V+bfYJ271ymS576MEpdpt8y9VV6IqEM4Fsvoee3FTZR9PGkVOTVFK96CxgSBhm24XX8hK2JlLhoaJRtogFPTtoktcSMRdj6Qi6sZtykoWq40ug5mK8A+wU4I+P9BNzpyWkw/+3np87Ih6sPnMtqCfP7cAI2qJUjI/egMjc0V1V7dZc494TGOmE8L84vof6VisRlLDFmlPJR6QwKqQDWFEvAwtgQWCchiBnasQGTAIieQsXDYyLZ+DC075Qn2RwmwCn4+uaWUr9vHU1jm8T7kwwkuI8w1CVIQGjGVvVDI3UAM3iFpbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) 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=ggnANSwwb08n2tU8fpqxA/Iqk6GcGUrCFqdVug2BQd0=; b=Y+p0D1GsNb6Nii/Vczp/uTJ5/mclxB5ZBqUc233aRh3xcIwwS/w77Nckee0oSSMyMBkv/v0yYjOmNX02CXt5Sbm9+ZFkgjwxOh9IeDn7YS9TjRjxUTytPq0HVmbOJJHC3FktvqdLKKlKKZd6pVQUUmKqyn0FoUr39xsDsgLEQpXc/BIwdeE25RABfUzu640GQ/Jyp0+AWCLg3faamnF3L7yvfGGTYrBhVY3Gc78F3ihXQwiCZHeJ4CGOC+nNPkroXmeCScdvGrzMOCi01W4JQhUxTMMPLFsgcQb4O8Bkl/mbzYvllO43AqCwutDV+GWKtrdEZyRQ/t2GyvySe2e+6w== Received: from MW4PR03CA0200.namprd03.prod.outlook.com (2603:10b6:303:b8::25) by DM6PR12MB4530.namprd12.prod.outlook.com (2603:10b6:5:2aa::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15; Tue, 22 Nov 2022 12:54:08 +0000 Received: from CO1NAM11FT010.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b8:cafe::5d) by MW4PR03CA0200.outlook.office365.com (2603:10b6:303:b8::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15 via Frontend Transport; Tue, 22 Nov 2022 12:54:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CO1NAM11FT010.mail.protection.outlook.com (10.13.175.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Tue, 22 Nov 2022 12:54:07 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Tue, 22 Nov 2022 04:53:58 -0800 Received: from nvidia.com (10.126.230.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.36; Tue, 22 Nov 2022 04:53:56 -0800 From: Dariusz Sosnowski To: Matan Azrad , Viacheslav Ovsiienko , Bing Zhao CC: , Raslan Darawsheh , Ori Kam Subject: [PATCH] net/mlx5: fix available tag registers calculation for HWS Date: Tue, 22 Nov 2022 12:53:20 +0000 Message-ID: <20221122125320.2327039-1-dsosnowski@nvidia.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Originating-IP: [10.126.230.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-TrafficTypeDiagnostic: CO1NAM11FT010:EE_|DM6PR12MB4530:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a4ca1af-aff0-4c60-063e-08dacc88a4e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WE09khV+60Q8MLz9IepGEk52PHfYWrlpz5TuFwe/yl8GPnlvupnsVfXg8kGbaG0ZrxG4h4ladlWv4y+fb1RM1rS62/MQvtV1jPP3ZIWIbhx7wAiALfaA5C1+jujSzNKOUFj1kdgEdLnrJBXNFzXpvXp92E2VWhnZoLlm1aRbZdZC3B20WTUGshestcJ2F2i6/Li+5E2FM4SKufvSyJ64RLdu43ZTZKSxej/1X8VreXWwtoo+koLbPSX6X3Qrs02v6Qi9t3lVuNJBHhS6KCxJ4ZLj2LUEJT4kQwL0+b5KbR2sfQWR1Isj0ug7rkinMolcntfkj342La6S87lMd6u/KQTEN7m9RrUHH+e2/Uswqo0qCuG9R3dg7HaTq+Gyn2mVIJj+cydJWrU21xz44DZmmeJMgl6BxWTPM3R907x37P/vE7ZB5JoiXaGUu+wfgas8RwIQD1Ox8P7asM0a8Pb7MCQRZOeP+90j2NTkoa//StwkmS3PgHg9kfr+sNmBjgvcoKXPJz0lt3YJ9XBvmdS4R07nHBpDJ4jmQnvCjMhDfsiHNFifAKdgyfepCRopgMO5szymJoN6RaJERBYe2pUC7XdLGwz3hTKy0dc48OXrjjtx9ylZnDspJgVCCrcJHYeIY48HgyzIIZnrGxzBqHRMYAI4hy2hPSpgxmcFBhja2Ljh6YEqnvnKyAvMXhI446kAUkxbq2HAyQTrx91fkPtARvDHm41S5Ln8gED4QbiAjZ4= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(39860400002)(396003)(376002)(136003)(346002)(451199015)(36840700001)(40470700004)(46966006)(356005)(478600001)(55016003)(36756003)(40480700001)(7636003)(16526019)(6666004)(2616005)(1076003)(83380400001)(336012)(186003)(40460700003)(426003)(47076005)(26005)(36860700001)(107886003)(5660300002)(86362001)(8936002)(6286002)(7696005)(41300700001)(2906002)(82740400003)(82310400005)(54906003)(110136005)(4326008)(8676002)(6636002)(70206006)(70586007)(316002)(131093003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2022 12:54:07.8744 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a4ca1af-aff0-4c60-063e-08dacc88a4e3 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT010.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4530 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 Before this patch, if two ports in separate switch domains were probed by an application, the shared array of available TAG registers was calculated incorrectly. When the intersection of supported REG_C registers and available TAG registers was calculated, capabilities were checked against an index of the TAG array, not the register stored under that index. This patch fixes this behavior by comparing capabilities mask against registers stored in the TAG array. Available TAG registers calculation is also refactored to simplify the code. Fixes: 8a89038f40ca ("net/mlx5: provide available tag registers") Cc: bingz@nvidia.com Signed-off-by: Dariusz Sosnowski Reviewed-by: Bing Zhao Acked-by: Ori Kam --- drivers/net/mlx5/mlx5_flow_hw.c | 46 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index a3c8056515..20c71ff7f0 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -7178,9 +7178,9 @@ void flow_hw_init_tags_set(struct rte_eth_dev *dev) uint32_t meta_mode = priv->sh->config.dv_xmeta_en; uint8_t masks = (uint8_t)priv->sh->cdev->config.hca_attr.set_reg_c; uint32_t i, j; - enum modify_reg copy[MLX5_FLOW_HW_TAGS_MAX] = {REG_NON}; + uint8_t reg_off; uint8_t unset = 0; - uint8_t copy_masks = 0; + uint8_t common_masks = 0; /* * The CAPA is global for common device but only used in net. @@ -7195,29 +7195,35 @@ void flow_hw_init_tags_set(struct rte_eth_dev *dev) if (meta_mode == MLX5_XMETA_MODE_META32_HWS) unset |= 1 << (REG_C_1 - REG_C_0); masks &= ~unset; + /* + * If available tag registers were previously calculated, + * calculate a bitmask with an intersection of sets of: + * - registers supported by current port, + * - previously calculated available tag registers. + */ if (mlx5_flow_hw_avl_tags_init_cnt) { MLX5_ASSERT(mlx5_flow_hw_aso_tag == priv->mtr_color_reg); for (i = 0; i < MLX5_FLOW_HW_TAGS_MAX; i++) { - if (mlx5_flow_hw_avl_tags[i] != REG_NON && !!((1 << i) & masks)) { - copy[mlx5_flow_hw_avl_tags[i] - REG_C_0] = - mlx5_flow_hw_avl_tags[i]; - copy_masks |= (1 << (mlx5_flow_hw_avl_tags[i] - REG_C_0)); - } - } - if (copy_masks != masks) { - j = 0; - for (i = 0; i < MLX5_FLOW_HW_TAGS_MAX; i++) - if (!!((1 << i) & copy_masks)) - mlx5_flow_hw_avl_tags[j++] = copy[i]; - } - } else { - j = 0; - for (i = 0; i < MLX5_FLOW_HW_TAGS_MAX; i++) { - if (!!((1 << i) & masks)) - mlx5_flow_hw_avl_tags[j++] = - (enum modify_reg)(i + (uint32_t)REG_C_0); + if (mlx5_flow_hw_avl_tags[i] == REG_NON) + continue; + reg_off = mlx5_flow_hw_avl_tags[i] - REG_C_0; + if ((1 << reg_off) & masks) + common_masks |= (1 << reg_off); } + if (common_masks != masks) + masks = common_masks; + else + goto after_avl_tags; + } + j = 0; + for (i = 0; i < MLX5_FLOW_HW_TAGS_MAX; i++) { + if ((1 << i) & masks) + mlx5_flow_hw_avl_tags[j++] = (enum modify_reg)(i + (uint32_t)REG_C_0); } + /* Clear the rest of unusable tag indexes. */ + for (; j < MLX5_FLOW_HW_TAGS_MAX; j++) + mlx5_flow_hw_avl_tags[j] = REG_NON; +after_avl_tags: priv->sh->hws_tags = 1; mlx5_flow_hw_aso_tag = (enum modify_reg)priv->mtr_color_reg; mlx5_flow_hw_avl_tags_init_cnt++;