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 AC432A034C; Wed, 21 Dec 2022 11:19:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 872A842D4D; Wed, 21 Dec 2022 11:18:08 +0100 (CET) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2054.outbound.protection.outlook.com [40.107.243.54]) by mails.dpdk.org (Postfix) with ESMTP id E073040F16 for ; Sun, 18 Dec 2022 16:09:49 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JOM+r0YU1Irc3VDrZasjSbvZlwzHY1XhrxNFmmWgT6NBjZ6t155yVoKm1pe5de72DzZkxZG3qeui+5qDwpITUgNPvM2UJQh+N6RAq6iC5NoPs1S1HyxTOrwuSS+O8hmwhArj/RgFBketbgLZ9LN8p21zBsjXipcE88Ld5IHHgc306xV01qHNHC2lmlXZ6viU0Xk5YRX1XSy4bqQFPN83NiqK7tJg/VBwHmz3ymnXvlYkcwlh+p3KrW3r6dAlMnmQ27PEwjnLRz/y/HmXCj+wz/e7mPzdD7Ans6u5mgkBj1blGs5YN2mJYg7WrEQtf2EujQjCCFH576KtdJ1GwZ9W5w== 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=/o0lFfIb/EivIpIyM4bVK70pSwiZ8g4HNj7cygfTZis=; b=bTVNTF9jJqI94Nh3iXONS2y6CiYClqStvB9oYR9Phzp+aPgmDDGKo5emnzfWwmxXGMolnHAikw9UchqqupZExQQyE2dwDsc+rns4gni1fmDbRpOkF8mhdvKJAvHIaIzdMASFmX92un4sSvA1TZvfqd4tbfPNDrAyizVRvJCqzM84ApBMJDYwdy3AQ/MxK9GBVt6wARUwpg/5UGY3D7w80NstmwPVwRMHIlcIF8noD2qMP9WAn4VuPhLRPDcG+RVNzwTAHqAwvIuZd02ZEgcOrKiEEAbc4C17WT0DZvnuTEyBqp0tr/jgdbPV78/hymLNH1XMMaIKoRlzlgOewdQWBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=monjalon.net 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=/o0lFfIb/EivIpIyM4bVK70pSwiZ8g4HNj7cygfTZis=; b=BJGyNqv8MVjEcEODWD3zu2ROTlgQ45KtSarA6J397Q+XgupCs78qZY0ZUGjgCIFrpscjgqxB+yJlm3Qg5wLWVLF6/k0ydKhuTbPcM6P9TtKMiKiaq47s63tO8sXOPDPKaQKgLGlhcSBGL6mSDroKkWZmB0kriktYzJM8yXE5lPSQxHtT/J23tpKOU5ZfAh2+ALgVQUCY1q3JSmRGYE6paNe6GvTZweqClPJRl6o7yRngnih8dRwjeRXeC9e+hZc8cdRoCRucYcZzAcw8P4YmDMgifOyYYju16aWW7N7JJq2NWvpBCajQ/8NpfrOOlguOagWlGl5T/W7YOAT4sz2REQ== Received: from MW4PR03CA0273.namprd03.prod.outlook.com (2603:10b6:303:b5::8) by MN0PR12MB5978.namprd12.prod.outlook.com (2603:10b6:208:37d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.16; Sun, 18 Dec 2022 15:09:47 +0000 Received: from CO1NAM11FT010.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b5:cafe::50) by MW4PR03CA0273.outlook.office365.com (2603:10b6:303:b5::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.18 via Frontend Transport; Sun, 18 Dec 2022 15:09:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) 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.5924.16 via Frontend Transport; Sun, 18 Dec 2022 15:09:46 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Sun, 18 Dec 2022 07:09:38 -0800 Received: from nvidia.com (10.126.231.37) 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; Sun, 18 Dec 2022 07:09:35 -0800 From: Erez Shitrit To: , , , , , Matan Azrad CC: , Subject: [PATCH V1 10/11] net/mlx5/hws: support actions while shared resources is used Date: Sun, 18 Dec 2022 17:08:51 +0200 Message-ID: <20221218150853.2167280-11-erezsh@nvidia.com> X-Mailer: git-send-email 2.18.2 In-Reply-To: <20221218150853.2167280-1-erezsh@nvidia.com> References: <20221218150853.2167280-1-erezsh@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.126.231.37] 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_|MN0PR12MB5978:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c7d4f18-681a-47c5-d0ef-08dae109e69d X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: u6wSO9FdrKyfsjojMzKJ6ChrT47PexzJxoPYiAx9WL+pLb+bozP5x4KCGRSTgZ7isoPurV7NgzWyVzJDWUYh6BAQR9mzS2xg1txQ6gANHIo2bpNHXF2a+uzmAf7WJM0Bb0x1uKjTqg/yKhuhN2TAvI/Hx9McOfTpRSeyX67BLN3TS8YIUiG6yEv+wa38JFKwzKT6wxteT0tVKf6JvgA+UDJHYaqAc4UKeWSt9GANaQ2W9R+UgZhqo+sG82jYQCtp1vPAjcC64DTteOWoLX5lyBEy7PG17NE7dx7ll3nD4BvHUZwydx8ZZT2+8sh5kGT11S+ZHv9cb73YNL79+8gN+YKAtSdFcu/4baaNNFO/0gCjFUnUz/UmtT3gwIZk9oZ79BM+PORiEf5HCJGbNeGMSqlhjYEGLFbesx8i9Q9Mjce13Fhj0UgNSF50+VQY6Lh/GCCrR1VFrPeDRPrSoB+E9P7c685ZEzCgUosvUuaA18bBKR9bA3FsX2SOfR0UAo2j5ry+n4L8ZFGuRcx7JN3wrMykvhGtgZ4eUr5Ea1pox80xLSuAS6l6+bbleW0UqmE2jM+TyvY46zagmOOUQ7cGXTwVEXCyKWLs014muq4m02VnOqVg+Kbj83dCRX/EZfqajyIU/GPvuo8XRDTCS0L1QQjqTV/VJvcVRt5DEL0e5JLbS0DxS9uNak7LYYaG4neL+XG/4zSC3HMzS+Om+0eU7w== X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(376002)(396003)(346002)(39860400002)(136003)(451199015)(46966006)(40470700004)(36840700001)(107886003)(6666004)(6636002)(54906003)(316002)(110136005)(36860700001)(40480700001)(2906002)(55016003)(40460700003)(70206006)(70586007)(6286002)(478600001)(1076003)(47076005)(426003)(86362001)(2616005)(26005)(4326008)(8676002)(186003)(36756003)(16526019)(8936002)(7636003)(82740400003)(7696005)(82310400005)(41300700001)(356005)(5660300002)(83380400001)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Dec 2022 15:09:46.5310 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c7d4f18-681a-47c5-d0ef-08dae109e69d 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.160]; 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: MN0PR12MB5978 X-Mailman-Approved-At: Wed, 21 Dec 2022 11:17:53 +0100 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 TIR/FT actions are different in the context of shared ibv resource, it created on the local ibv_context and aliased to the shared ibv_context. Other actions should be created on the shared ibv resource, new flag was added to indicates where this object came from. Signed-off-by: Erez Shitrit Reviewed-by: Alex Vesker --- drivers/net/mlx5/hws/mlx5dr.h | 5 ++- drivers/net/mlx5/hws/mlx5dr_action.c | 60 ++++++++++++++++++++++++++-- drivers/net/mlx5/hws/mlx5dr_action.h | 3 ++ drivers/net/mlx5/mlx5_devx.c | 2 +- 4 files changed, 64 insertions(+), 6 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr.h b/drivers/net/mlx5/hws/mlx5dr.h index aa36e3111f..c0f9a5e984 100644 --- a/drivers/net/mlx5/hws/mlx5dr.h +++ b/drivers/net/mlx5/hws/mlx5dr.h @@ -410,12 +410,15 @@ mlx5dr_action_create_dest_vport(struct mlx5dr_context *ctx, * Direct rule TIR devx object. * @param[in] flags * Action creation flags. (enum mlx5dr_action_flags) + * @param[in] is_local + * indicates where the tir object was created, local gvmi or other gvmi * @return pointer to mlx5dr_action on success NULL otherwise. */ struct mlx5dr_action * mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx, struct mlx5dr_devx_obj *obj, - uint32_t flags); + uint32_t flags, + bool is_local); /* Create direct rule TAG action. * diff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c index da19c1ca7d..2db62635c1 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.c +++ b/drivers/net/mlx5/hws/mlx5dr_action.c @@ -744,7 +744,10 @@ mlx5dr_action_create_dest_table(struct mlx5dr_context *ctx, return NULL; if (mlx5dr_action_is_root_flags(flags)) { - action->devx_obj = tbl->ft->obj; + if (mlx5dr_context_shared_gvmi_used(ctx)) + action->devx_obj = tbl->local_ft->obj; + else + action->devx_obj = tbl->ft->obj; } else { ret = mlx5dr_action_create_stcs(action, tbl->ft); if (ret) @@ -758,10 +761,38 @@ mlx5dr_action_create_dest_table(struct mlx5dr_context *ctx, return NULL; } +static int mlx5dr_action_get_dest_tir_obj(struct mlx5dr_context *ctx, + struct mlx5dr_action *action, + struct mlx5dr_devx_obj *obj, + struct mlx5dr_devx_obj **ret_obj) +{ + int ret; + + if (mlx5dr_context_shared_gvmi_used(ctx)) { + ret = mlx5dr_matcher_create_aliased_obj(ctx, + ctx->local_ibv_ctx, + ctx->ibv_ctx, + ctx->caps->vhca_id, + obj->id, + MLX5_GENERAL_OBJ_TYPE_TIR_ALIAS, + &action->alias.devx_obj); + if (ret) { + DR_LOG(ERR, "Failed to create tir alias"); + return rte_errno; + } + *ret_obj = action->alias.devx_obj; + } else { + *ret_obj = obj; + } + + return 0; +} + struct mlx5dr_action * mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx, struct mlx5dr_devx_obj *obj, - uint32_t flags) + uint32_t flags, + bool is_local) { struct mlx5dr_action *action; int ret; @@ -773,6 +804,13 @@ mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx, return NULL; } + if (!is_local) { + DR_LOG(ERR, "TIR should be created on local ibv_device, flags: 0x%x", + flags); + rte_errno = ENOTSUP; + return NULL; + } + action = mlx5dr_action_create_generic(ctx, flags, MLX5DR_ACTION_TYP_TIR); if (!action) return NULL; @@ -780,13 +818,23 @@ mlx5dr_action_create_dest_tir(struct mlx5dr_context *ctx, if (mlx5dr_action_is_root_flags(flags)) { action->devx_obj = obj->obj; } else { - ret = mlx5dr_action_create_stcs(action, obj); - if (ret) + struct mlx5dr_devx_obj *cur_obj = NULL; /*compilation warn*/ + + ret = mlx5dr_action_get_dest_tir_obj(ctx, action, obj, &cur_obj); + if (ret) { + DR_LOG(ERR, "Failed to create tir alias (flags: %d)", flags); goto free_action; + } + + ret = mlx5dr_action_create_stcs(action, cur_obj); + if (ret) + goto clean_obj; } return action; +clean_obj: + mlx5dr_cmd_destroy_obj(action->alias.devx_obj); free_action: simple_free(action); return NULL; @@ -1589,6 +1637,10 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action) { switch (action->type) { case MLX5DR_ACTION_TYP_TIR: + mlx5dr_action_destroy_stcs(action); + if (mlx5dr_context_shared_gvmi_used(action->ctx)) + mlx5dr_cmd_destroy_obj(action->alias.devx_obj); + break; case MLX5DR_ACTION_TYP_MISS: case MLX5DR_ACTION_TYP_TAG: case MLX5DR_ACTION_TYP_DROP: diff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h index 9a4827481a..17619c0057 100644 --- a/drivers/net/mlx5/hws/mlx5dr_action.h +++ b/drivers/net/mlx5/hws/mlx5dr_action.h @@ -138,6 +138,9 @@ struct mlx5dr_action { uint16_t vport_num; uint16_t esw_owner_vhca_id; } vport; + struct { + struct mlx5dr_devx_obj *devx_obj; + } alias; }; }; diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index 02deaac612..f6e1943fd7 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -913,7 +913,7 @@ mlx5_devx_hrxq_new(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq, if (hrxq->hws_flags) { hrxq->action = mlx5dr_action_create_dest_tir (priv->dr_ctx, - (struct mlx5dr_devx_obj *)hrxq->tir, hrxq->hws_flags); + (struct mlx5dr_devx_obj *)hrxq->tir, hrxq->hws_flags, true); if (!hrxq->action) goto error; return 0; -- 2.18.2