From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 56BC4A0C41 for ; Wed, 6 Oct 2021 14:11:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1EF8841180; Wed, 6 Oct 2021 14:10:52 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2053.outbound.protection.outlook.com [40.107.94.53]) by mails.dpdk.org (Postfix) with ESMTP id C6D624147B; Wed, 6 Oct 2021 14:10:50 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=chz4Tn5RMFyv2/b2buKKSR9+D3z6s5btmcYF1B55Ue4P2wdYwQvE258PsAh/1Zsg54kPWguzE+GkKIvwCRils4wjsuUpHfbjXl8SX+N4gNHgTcqVCCSJTvhNZlvpKBYnwvZtKkTAJy2kDC6gkfDy0Jl701HLHhzgeP6F7uDUcFgchgGuMcggqukf1IyO+8FVSTexmY5CtRQ5ilzY/soXaz9qw3L+oSzjxuzVYM2ot/buiVO0bkDkl4wtkCmBZeH/DzYXR7AHXLVriDvtYD0/vcTwalmw3XTgMbG717p6TFQW4sLgHgrSogoLt+YfIBmH6XXA93EuFC8yDmZrK/X/4A== 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=V+mOr5RstG2ipWBgboabTa94JhtsBPorM4A6xey0iF0=; b=FXkzhqMrlKcOBiC+2md3KDKTgy8bhcMg95rZw6AX9xYf6xqwbV9XLiNDb4aB+Ad/I/0Nrxr5m60pJVnZykpcPI7/IFSO4/sYz6/SEiPklZx/0QxvZ4afRpJpQBsTRljND1yvWY+Om4j4MVw4EoD1zsUJCkVz/i53fSwrpM/OUa4Lw2h5ShxloRBxsSbngRZ04v5yIjle7JxGl4N6YCfPdWnQRQKYiuj1zpLksMj/Sv+Mi/60rDRhR0ZO6kgGqbJ7yEiub2jqjOEaWCrc5wS/g0JyWlZgxFDJjYPIyhpVhbVvSaxSdXyIV6dMm6hzie7g0U1CpMxrMTpN3lxxQOnx4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none 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=V+mOr5RstG2ipWBgboabTa94JhtsBPorM4A6xey0iF0=; b=lMDu9XMazg+sBMFkbNOSSUQfHMM80c/Ho/4Xp24L/mKFD4yHmQ2pVLr2/uGShMXQwOnX0SlWl09EplvcgeegxsD0bEoiGt5IwXNdZTar6VFdP+I/yowA5VPVwRPKvdrlOGxRKafhSqjoKCfx56M42Hs36MW4k+sJvFlLxgMxZ7o7elx+biFZsFD2qMGUQLNieEXIFEtcFctBuosKo/JISQQnbzqCxReOaPgiGRbDUZmRPmHHIhQserdknm2hjoU6vYBUDqCwkicLwBvxQThTiIrzfTos+jhlhcjNFbtkbK+SqMUUFzDz8mh/IkDz3VxwdYwy1s+wKJ8IVXnZ0C1qBQ== Received: from DS7PR03CA0005.namprd03.prod.outlook.com (2603:10b6:5:3b8::10) by BN8PR12MB3329.namprd12.prod.outlook.com (2603:10b6:408:61::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.19; Wed, 6 Oct 2021 12:10:49 +0000 Received: from DM6NAM11FT017.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3b8:cafe::c) by DS7PR03CA0005.outlook.office365.com (2603:10b6:5:3b8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.22 via Frontend Transport; Wed, 6 Oct 2021 12:10:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by DM6NAM11FT017.mail.protection.outlook.com (10.13.172.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4587.18 via Frontend Transport; Wed, 6 Oct 2021 12:10:48 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Wed, 6 Oct 2021 12:10:45 +0000 From: Tal Shnaiderman To: CC: , , , , , , , , Date: Wed, 6 Oct 2021 15:09:37 +0300 Message-ID: <20211006120945.6612-5-talshn@nvidia.com> X-Mailer: git-send-email 2.16.1.windows.4 In-Reply-To: <20211006120945.6612-1-talshn@nvidia.com> References: <20211006120945.6612-1-talshn@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 64903253-9a93-4551-7723-08d988c25556 X-MS-TrafficTypeDiagnostic: BN8PR12MB3329: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1169; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oxVmx5Ppdg0ZnY7x4boKSmHO7mOrvw45SOI+XSftAD0OgZcVnmAdfG7fw9PeuCaCZeHM8SoFZ3TepJoTnZlft5bC0kjr9435N5DjdFt+llhSq6vGgKcNQ/diGBhHr4FyzTisv58crQKGM+VVlVKI9tr0gS6KpVUt3DDOsw3dKrJ8J5SdeGnAL8UHvNrSFZbAiOCBc7YTD66N0hBRc/7HX3IjnswkE+EcYwlJqWCSGdWmzUYbGAJ7B9ChP5Z+G/xJSXRdy/ry/2xe07MO8q8apEH8VrM8YcVERjO03Us1spo8yAzGdiKW6rnRV3OC7m2FwfcA4I0jbbmhj6L8DQxSDB8xUly1fDWYel2+arlXoR/ka9YvdVITBQgPsppeKP+0w2ophu5MuaNUAOGZJHupMMjYY1tmyvJOd/+MqrCWNjd/uJDR50zjiRA3rGXRsvY2WFlLa/cjKRAMcNa94iSdlTxHK9ZSohQ/z41XWRGEXV3JRrnWnf20J/chXBSRqInZNioLjpZiXqdqtOj7CCABDiM8urP/NUaISOEoHxceR16KrVOPe58Nhxu70zrHL+ik7hZOgTFAcg5BAeRnbMc65kE4PhTEni7VxF16ansJfVGOb2A3NGxsp1+zM9wy/JuSdS/qzkMdnQU3tOyjs6XqrV5WvyVw4fNVTw6NlxUVrlu/Rp/H7g9b2eS/q9HFg665nzrxwnFWf4O9Zq/0X95jPQ== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(83380400001)(82310400003)(8936002)(70586007)(1076003)(8676002)(55016002)(6666004)(6286002)(86362001)(36756003)(36860700001)(5660300002)(6916009)(336012)(26005)(356005)(4326008)(70206006)(508600001)(7636003)(54906003)(7696005)(2906002)(2616005)(426003)(47076005)(16526019)(186003)(316002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2021 12:10:48.5119 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 64903253-9a93-4551-7723-08d988c25556 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT017.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR12MB3329 Subject: [dpdk-stable] [PATCH 04/12] net/mlx5: fix tunneling support query X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Currently, the PMD decides if the tunneling offload can enable VXLAN/GRE/GENEVE tunneled TSO support by checking config->tunnel_en (single bit) and config->tso. This is incorrect, the right way is to check the following flags returned by the mlx5dv_query_device function: MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN - if supported the offload DEV_TX_OFFLOAD_VXLAN_TNL_TSO can be enabled. MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE - if supported the offload DEV_TX_OFFLOAD_GRE_TNL_TSO can be enabled. MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE - if supported the offload DEV_TX_OFFLOAD_GENEVE_TNL_TSO can be enabled. The fix enables the offloads according to the correct flags returned by the kernel. Fixes: dbccb4cddcd2f7c ("net/mlx5: convert to new Tx offloads API") Cc: stable@dpdk.org Signed-off-by: Tal Shnaiderman Acked-by: Matan Azrad --- drivers/net/mlx5/linux/mlx5_os.c | 28 +++++++++++++++++----------- drivers/net/mlx5/linux/mlx5_os.h | 15 +++++++++++++++ drivers/net/mlx5/mlx5.h | 2 +- drivers/net/mlx5/mlx5_txq.c | 24 +++++++++++++++++++----- drivers/net/mlx5/windows/mlx5_os.h | 6 ++++++ 5 files changed, 58 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index a6542629c7..9ac354fabe 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -963,7 +963,6 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, int err = 0; unsigned int hw_padding = 0; unsigned int mps; - unsigned int tunnel_en = 0; unsigned int mpls_en = 0; unsigned int swp = 0; unsigned int mprq = 0; @@ -1145,20 +1144,27 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, config->cqe_comp = 1; #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT if (dv_attr.comp_mask & MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS) { - tunnel_en = ((dv_attr.tunnel_offloads_caps & - MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN) && - (dv_attr.tunnel_offloads_caps & - MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE) && - (dv_attr.tunnel_offloads_caps & - MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE)); - } - DRV_LOG(DEBUG, "tunnel offloading is %ssupported", - tunnel_en ? "" : "not "); + config->tunnel_en = dv_attr.tunnel_offloads_caps & + (MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN | + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE | + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE); + } + if (config->tunnel_en) { + DRV_LOG(DEBUG, "tunnel offloading is supported for %s%s%s", + config->tunnel_en & + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN ? "[VXLAN]" : "", + config->tunnel_en & + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE ? "[GRE]" : "", + config->tunnel_en & + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE ? "[GENEVE]" : "" + ); + } else { + DRV_LOG(DEBUG, "tunnel offloading is not supported"); + } #else DRV_LOG(WARNING, "tunnel offloading disabled due to old OFED/rdma-core version"); #endif - config->tunnel_en = tunnel_en; #ifdef HAVE_IBV_DEVICE_MPLS_SUPPORT mpls_en = ((dv_attr.tunnel_offloads_caps & MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_CW_MPLS_OVER_GRE) && diff --git a/drivers/net/mlx5/linux/mlx5_os.h b/drivers/net/mlx5/linux/mlx5_os.h index da036edb72..80c70d713a 100644 --- a/drivers/net/mlx5/linux/mlx5_os.h +++ b/drivers/net/mlx5/linux/mlx5_os.h @@ -33,4 +33,19 @@ enum mlx5_sw_parsing_offloads { MLX5_SW_PARSING_TSO_CAP = 0, #endif }; + +enum mlx5_tunnel_offloads { +#ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT + MLX5_TUNNELED_OFFLOADS_VXLAN_CAP = + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_VXLAN, + MLX5_TUNNELED_OFFLOADS_GRE_CAP = + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GRE, + MLX5_TUNNELED_OFFLOADS_GENEVE_CAP = + MLX5DV_RAW_PACKET_CAP_TUNNELED_OFFLOAD_GENEVE, +#else + MLX5_TUNNELED_OFFLOADS_VXLAN_CAP = 0, + MLX5_TUNNELED_OFFLOADS_GRE_CAP = 0, + MLX5_TUNNELED_OFFLOADS_GENEVE_CAP = 0, +#endif +}; #endif /* RTE_PMD_MLX5_OS_H_ */ diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 0694927457..58f12cd75c 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -244,7 +244,7 @@ struct mlx5_dev_config { unsigned int hw_padding:1; /* End alignment padding is supported. */ unsigned int vf:1; /* This is a VF. */ unsigned int sf:1; /* This is a SF. */ - unsigned int tunnel_en:1; + unsigned int tunnel_en:3; /* Whether tunnel stateless offloads are supported. */ unsigned int mpls_en:1; /* MPLS over GRE/UDP is enabled. */ unsigned int cqe_comp:1; /* CQE compression is enabled. */ diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index 8dca2b7f79..54f42292ac 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -120,10 +120,17 @@ mlx5_get_tx_port_offloads(struct rte_eth_dev *dev) if (config->tunnel_en) { if (config->hw_csum) offloads |= DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM; - if (config->tso) - offloads |= (DEV_TX_OFFLOAD_VXLAN_TNL_TSO | - DEV_TX_OFFLOAD_GRE_TNL_TSO | - DEV_TX_OFFLOAD_GENEVE_TNL_TSO); + if (config->tso) { + if (config->tunnel_en & + MLX5_TUNNELED_OFFLOADS_VXLAN_CAP) + offloads |= DEV_TX_OFFLOAD_VXLAN_TNL_TSO; + if (config->tunnel_en & + MLX5_TUNNELED_OFFLOADS_GRE_CAP) + offloads |= DEV_TX_OFFLOAD_GRE_TNL_TSO; + if (config->tunnel_en & + MLX5_TUNNELED_OFFLOADS_GENEVE_CAP) + offloads |= DEV_TX_OFFLOAD_GENEVE_TNL_TSO; + } } if (!config->mprq.enabled) offloads |= DEV_TX_OFFLOAD_MBUF_FAST_FREE; @@ -978,7 +985,14 @@ txq_set_params(struct mlx5_txq_ctrl *txq_ctrl) MLX5_MAX_TSO_HEADER); txq_ctrl->txq.tso_en = 1; } - txq_ctrl->txq.tunnel_en = config->tunnel_en | config->swp; + if (((DEV_TX_OFFLOAD_VXLAN_TNL_TSO & txq_ctrl->txq.offloads) && + (config->tunnel_en & MLX5_TUNNELED_OFFLOADS_VXLAN_CAP)) | + ((DEV_TX_OFFLOAD_GRE_TNL_TSO & txq_ctrl->txq.offloads) && + (config->tunnel_en & MLX5_TUNNELED_OFFLOADS_GRE_CAP)) | + ((DEV_TX_OFFLOAD_GENEVE_TNL_TSO & txq_ctrl->txq.offloads) && + (config->tunnel_en & MLX5_TUNNELED_OFFLOADS_GENEVE_CAP)) | + (config->swp & MLX5_SW_PARSING_TSO_CAP)) + txq_ctrl->txq.tunnel_en = 1; txq_ctrl->txq.swp_en = (((DEV_TX_OFFLOAD_IP_TNL_TSO | DEV_TX_OFFLOAD_UDP_TNL_TSO) & txq_ctrl->txq.offloads) && (config->swp & diff --git a/drivers/net/mlx5/windows/mlx5_os.h b/drivers/net/mlx5/windows/mlx5_os.h index 6de683357c..8b58265687 100644 --- a/drivers/net/mlx5/windows/mlx5_os.h +++ b/drivers/net/mlx5/windows/mlx5_os.h @@ -22,4 +22,10 @@ enum mlx5_sw_parsing_offloads { MLX5_SW_PARSING_TSO_CAP = 1 << 2, }; +enum mlx5_tunnel_offloads { + MLX5_TUNNELED_OFFLOADS_VXLAN_CAP = 1 << 0, + MLX5_TUNNELED_OFFLOADS_GRE_CAP = 1 << 1, + MLX5_TUNNELED_OFFLOADS_GENEVE_CAP = 1 << 2, +}; + #endif /* RTE_PMD_MLX5_OS_H_ */ -- 2.16.1.windows.4