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 A6236A00C5; Mon, 19 Dec 2022 09:26:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AE71A42D49; Mon, 19 Dec 2022 09:25:36 +0100 (CET) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2045.outbound.protection.outlook.com [40.107.220.45]) by mails.dpdk.org (Postfix) with ESMTP id D4D6642D45 for ; Mon, 19 Dec 2022 09:25:35 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hc3CuOS4vXOwsMYZ9HKGWOvQPhx6NmJuRCF2tdke4KNNbqcQ/n4YaiPIDNaE7NIDRXqawur3oDFv/CgTiZsw9+qT+G3dWDrtEZnTpkUR86Muoy328QRCrrukuaIFUlkpiumuV49QpYUYYV7TnwfX8gW077PBBECdE3bczVEH0ktC1ngI0OTFYzu120zwXBYmmsEy34w8vA+dvdjyEKyaNRcHokA3sR/WeTzk0hMv5+XKZanUs3lWC+N7quFHUZ3KxIY26BZwK1OY5qs6wkvBjJ5EiANFM7guJGZArfq4MfMIHZeGs4v3mXhs+Ky2/UJ7X+Y5rykv+X2SAVXFBK0+9A== 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=jj5QHDO4e50hj1r6v7LjpYG0h6CB6/DOOshjteSPZGlJ5MUTOtLd4aSS8Z7ujAYHSXfd5QyZtWgW4FaKoSEcCv8pgdXvSixR8+yTfJOTYqqzNcu7+dhCpLz7xl8g4Js55bW1fOYwBiEyJ/qbNIZoCecLWnhmgh3QxB+nkPwEYrMp0eBVWMURDhTztr4TH8V5RBeXm1ITw81jSxuroPUJXGiccIYE+vdDiDkJDgpWzaDhlqWwv2Wi3G4+ryRnSbf0uQmZFsUnNLC6YiaMVAHHZut1ig4v7PT0y4taq/d3LZT0zMZdKJZvlApYQAn1ze+rjOXxv2JNiUnpb1ApSX111g== 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=baNnXFk0Wau5rONwc6VPCruZJ6cHWE2IK+ZXvIeuPA9CxiNUPwSbwLID6w3IhNayj+FOvuiO9qjDTQ7MXK9LYJkXteCiDEmtAuFXV4Pwn8Zq53Ny5FdD/fOCHOlmcGRWuAklsKvwMrgFtpPGG5L3dI7UCcVaD98B6S9ofE2+/8AhnA1HFnfuUJLQcnabFtgne3JOuMeEiAixB67cS8lW12kUFXf2AYde2WCSSqEE8mx56N7SAlM1onPqF9u06ePok61Db08xSwm3csDbiXkik9V3BGodFKjQ64q2KiVaVzVeabQa8t4FFs35PiHojrblfp1Qb63a5AA7zWZ7UkZCpA== Received: from BN8PR03CA0032.namprd03.prod.outlook.com (2603:10b6:408:94::45) by MW4PR12MB6754.namprd12.prod.outlook.com (2603:10b6:303:1eb::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.16; Mon, 19 Dec 2022 08:25:34 +0000 Received: from BN8NAM11FT027.eop-nam11.prod.protection.outlook.com (2603:10b6:408:94:cafe::cf) by BN8PR03CA0032.outlook.office365.com (2603:10b6:408:94::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.20 via Frontend Transport; Mon, 19 Dec 2022 08:25:33 +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 BN8NAM11FT027.mail.protection.outlook.com (10.13.177.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.16 via Frontend Transport; Mon, 19 Dec 2022 08:25:33 +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; Mon, 19 Dec 2022 00:25:15 -0800 Received: from nvidia.com (10.126.230.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; Mon, 19 Dec 2022 00:25:12 -0800 From: Erez Shitrit To: , , , , Matan Azrad CC: Subject: [PATCH V1 10/11] net/mlx5/hws: support actions while shared resources is used Date: Mon, 19 Dec 2022 10:24:15 +0200 Message-ID: <20221219082416.2223812-11-erezsh@nvidia.com> X-Mailer: git-send-email 2.18.2 In-Reply-To: <20221219082416.2223812-1-erezsh@nvidia.com> References: <20221219082416.2223812-1-erezsh@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.126.230.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: BN8NAM11FT027:EE_|MW4PR12MB6754:EE_ X-MS-Office365-Filtering-Correlation-Id: a8e1b104-b229-4bb9-eb71-08dae19a9902 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: c8+EStesWaQCGwvEGajDLq7zHDCgvqyaOPR/7k6FjcZ69y0j7Acm8yZ0+nHv9MQFhfhuDMT+A25aXSgnZuaFeahmGQsgKso8Vq10uSpu3qtADJb6+3K6LXcFzx4p/qG0fzz9+nhzNT6cy88vwX4hutkwwZwSuWfavHQn/IVxowoKdQLC1mStxLZ1GvMTcLmSLGuH/MxuCgzYFHXMr6kk09EvToC9Kg85LYGgsqC0416ZzjcQH3OlKCx+tfecM9TyVapuQuHmsLYododF6Mk9fkGQNYwVme9fo9fp0epoyEi2qrQ4B8wlCl1QUq1mwCs93hEnLRFlf2X3+f/RVSvgcvZflCWi3Fqtcdtpvsqxw0IptFOfeSvxVHDQyv+UBrr/2ZDS1nBKezpOIArftW7CUBUNVTQzwarra5x/GDKPhRbMqYiu2IClGZoMFSqA64M7yfhxoTd2oUWWB1erhr4+6+FMtxJpqKjI3gNRxX/yvzvIXkGQGtaTSGdEKRoR32heE3hXStkSvIx5cGttKz2fTMevselTx+FJdmtTqqRxEKtpvtm/xth1J2iU7t8czHbdbC5pAXAhgg6lIYfbq7kqmG4Flw9rANAga6GrgWyplpV4hu7mTXB8J5fHfdE1ZELyDXmO4Ga82IWlhCECMTa92dsOdsDkoGT7XDSqDNIiRpzMUMQnX55E2wLhgnzqDaIRod4UZEOMy1mC+vLMmw6ssQ== 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)(396003)(346002)(136003)(39860400002)(376002)(451199015)(40470700004)(36840700001)(46966006)(41300700001)(70586007)(70206006)(5660300002)(8676002)(4326008)(6636002)(2906002)(316002)(8936002)(110136005)(26005)(6286002)(7696005)(186003)(478600001)(47076005)(426003)(1076003)(40480700001)(55016003)(86362001)(83380400001)(82310400005)(36860700001)(16526019)(2616005)(336012)(7636003)(356005)(82740400003)(36756003)(40460700003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2022 08:25:33.2633 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a8e1b104-b229-4bb9-eb71-08dae19a9902 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: BN8NAM11FT027.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6754 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