From patchwork Thu Jan 5 13:03:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erez Shitrit X-Patchwork-Id: 121621 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 B3BB9A00C2; Thu, 5 Jan 2023 14:04:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3F29442D3C; Thu, 5 Jan 2023 14:04:15 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2089.outbound.protection.outlook.com [40.107.93.89]) by mails.dpdk.org (Postfix) with ESMTP id 76CFC42D35 for ; Thu, 5 Jan 2023 14:04:13 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MaZR57r890jV1g5DAZOnQ14xVopeigVupYFlbujozPYknvZvKAo8D+PJH1PeTGPGPuAL3E3i0bRUoi9LZpKWF3h+MkNchxP7Sot8rdFI97eQ7EJVIRd1nQ96xDmyaqM8obVZcnAFf5L12+5M9T05dvrv6SbqU+7/e7luy1io4E1HZGzdHdVkzd99nMGtT2F6AOAo71UTDjNaBHU96SGVqR2U/T/vwzlTaIGCp+IZ06YvUug6Wd1SzGfUV1/WPDqOb1zuwXMdQ1Ej5AS6GztGbciw93R0R00aX4x4THBNmT5Bqq5MJbGswckVtUHvWb5H8Rbt8fzW6fJTPJ9wyZr3dg== 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=Iy6SNKF2FYZ4LIf3dHsKBIis9W+SjxUrTHWxIjqQUHI=; b=i1PgcBVB9K9A5R5/gVnk8fecKCyKdC1ZiTqY+SKBomj9xaPa1HCIe2rMx5HObyTqoQXJZ24DwdVjSc6JFxa9jfryQyZ8HFXNA3HV+vF0RNp7JKhKyLFuEfxQEvGIFmouC3Cf135RfWgoQ0ut2Tk/R+AvM8nhLE8ZVEsC7aktpLifHnLz8AIeDbRqK+Q8bzzSU0Txvln+lWj1v+DBeVHle9o2f0cStzi8PKrilLgD4MAbOalqzUhV2rz6PjAgVRW6V0u8QMBDedb+MvpdD5aqHzP0E53miJJg3kHLsaX9INsmT30dnE+i19V69i6WEeTvymF7ne2kxYvIMDW92t//FQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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=Iy6SNKF2FYZ4LIf3dHsKBIis9W+SjxUrTHWxIjqQUHI=; b=FUdgV6DurcxaZMf4Gaw+qEGoQtC48MSdoI607dLE/dstLa4E4q3fjtI/jDkFhXzA5SUH48DmsEuep2w0utvXz1MF1lbbCCNXJeNF2BPei7LIDKiuahqvpnrTSu4FO8Osm7jSD97s5Jv1zqoox0Dd+LPl+Uq9iu/GQd6xWbw9h/q6O8ouyHHVY2qVy8l3TF0pXVi0khX7GCDH/lf6oU6zUHC7EcP4lprTJch5aKvjiIuPVMYFq0lna6nJip3RylAjuCZDMrwNc6u1WdTYikEp4gUo4FM12ydv7J75IP/scdwcMJJy4m9a4nVrKUWOslOKRkDburVxxaXrIsY25x2sFg== Received: from BN9PR03CA0124.namprd03.prod.outlook.com (2603:10b6:408:fe::9) by BY5PR12MB4291.namprd12.prod.outlook.com (2603:10b6:a03:20c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 13:04:11 +0000 Received: from BN8NAM11FT103.eop-nam11.prod.protection.outlook.com (2603:10b6:408:fe:cafe::99) by BN9PR03CA0124.outlook.office365.com (2603:10b6:408:fe::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.14 via Frontend Transport; Thu, 5 Jan 2023 13:04:10 +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 BN8NAM11FT103.mail.protection.outlook.com (10.13.176.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5966.17 via Frontend Transport; Thu, 5 Jan 2023 13:04:09 +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; Thu, 5 Jan 2023 05:03:59 -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; Thu, 5 Jan 2023 05:03:57 -0800 From: Erez Shitrit To: CC: , , Matan Azrad , Viacheslav Ovsiienko Subject: [PATCH v2 09/10] net/mlx5/hws: support actions while shared resources is used Date: Thu, 5 Jan 2023 15:03:02 +0200 Message-ID: <20230105130304.537205-10-erezsh@nvidia.com> X-Mailer: git-send-email 2.18.2 In-Reply-To: <20230105130304.537205-1-erezsh@nvidia.com> References: <20221219082416.2223812-3-erezsh@nvidia.com> <20230105130304.537205-1-erezsh@nvidia.com> MIME-Version: 1.0 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: BN8NAM11FT103:EE_|BY5PR12MB4291:EE_ X-MS-Office365-Filtering-Correlation-Id: 76dad0ba-660d-4dc9-9a9b-08daef1d55c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pE7JwyEpQ6V4Fua2Th0gF6l9yDUeGVTx3gjeFb1m09+mNuhOv1v27NtslPFp7tMosUHINAJusI11eb14O0osZb59TGzZixz15TI0UsPxf53qal/kCqUDP052uL4OQeuQ1mv1kKOsGaBGczQp4o1eaxLltbAZP1MjyJ7gbaagSKVp9StsY5ujWg+OTjH1uY3RhQP9izup94tUunIymMentw2rwS41xNRK7hkmQ5KXJ0ks+ELryRnEl9du11YFKqCA6RZTh6aZEduuAS1BohsrbmmZvCMnl0AS6kIO8bt+wbUkin5rGVYPUbSGn8R4xmIVXD1GOEgv+enHQSQAZcd3A4RK9z4zAXwsH8N1X9jXexU+zYsAMu1z3c8AGcozZ0MehQoVJCw6FrYp+o49BAdrHfVQ6VRuJXEk9D3lXBmPSJRbtA16Pb6baunXvMx7tCFcfCnsNkgd9uE+0r/gTXDVSX6ahMrYTGXme1wp8FOi9EdngZR+VpUe+KjH+rqE/xcIh3Snt5T2I0NYV2b12RL9idOwkwiUfOfYvY3BDh054RAYJHGBJ3SOc+AoJdsm75Mo/WPqrpo6rWU49CYLlXkHNmPz9j31LaAzjAKkovq5DVgbdEpQ+WUUWPpBzCSxRGfK4ekMR168D93M0H6y4cOG5KC5q+SWn6SrBZxDD2eGOgYfDx6H2njoaXxW7IJJxGDNjTQj+RKNa1Vd/M4/GRAr1g== 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)(136003)(39860400002)(451199015)(36840700001)(46966006)(40470700004)(5660300002)(6286002)(8936002)(426003)(47076005)(16526019)(82310400005)(41300700001)(2906002)(186003)(83380400001)(36860700001)(26005)(336012)(6666004)(82740400003)(356005)(7636003)(8676002)(70586007)(70206006)(107886003)(4326008)(478600001)(1076003)(40460700003)(2616005)(6916009)(86362001)(316002)(36756003)(7696005)(40480700001)(54906003)(55016003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2023 13:04:09.5844 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 76dad0ba-660d-4dc9-9a9b-08daef1d55c1 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: BN8NAM11FT103.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4291 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 Acked-by: Viacheslav Ovsiienko --- 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;