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 BFCC2A054A; Fri, 23 Sep 2022 16:45:42 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3D3C542BD5; Fri, 23 Sep 2022 16:44:24 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2044.outbound.protection.outlook.com [40.107.93.44]) by mails.dpdk.org (Postfix) with ESMTP id 9EFC042BA7 for ; Fri, 23 Sep 2022 16:44:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XBqZXpnebg7DQe4W/zRHqCz4Vv3x3hHduXBjOp37yKsdLspSsk4bhjqGk8FdRBjKlrsRVClUPBRJ9MHeRF0CU19MoQ+z+N8Usj9xzoH2c/yWup5gIERKMBKoQZzBi78p9clzv5nTZ0R2moRXiyW5f4yB5OUOxDqsq3xu3RcyYwKFRGO0YCT/RKvYVNinH6tLNzErLJK9gwjs2rw8/0wVgkoqUsEwLybDPKDoG8eQMRd22IzbldS14fB3vsiLJOJWOFaMVnhKOsYa9j+NT9zt9L4ceP7TaXUyE7TyiOuhKXh4fFR+MsqlC7o12P0nLvYuy62mC09Az99j2RNOtBRHgA== 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=gxW2BWl8L0iHSCNYymMnCQWyXhkLGJ4106Lah57kfWU=; b=j64UznfbNvMyF76AytIJfQRB3BLXSOb4Vrm/NQtIdrYDeH97t68ilMSP+wq3wknrtSrKauBr+AuMiOniWlVbVprQ2+SPM6L+4bBm7mPXB5x/i3rU1GqxbkE/9QHST6w9U0l2OjBKKTbRtfYZezw9KCit32ZyKOzbtGFLoFO1KxHyJNd23BrNWU5xUVY0GkDaXvRzz0bVrZ8AfgVOHBlVz83VyyTXrQT0xuYcxHnQrw8UlxVsmSBTNBnm0KwZiK4LZVfhtd0JcaQW7u9RwC8JE6NUkv7YU0iV3WjUgcD5GeRL201u+PCWjOBDUAtPzUEwht5RFSJ5T3MHMxFz7j03bQ== 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=gxW2BWl8L0iHSCNYymMnCQWyXhkLGJ4106Lah57kfWU=; b=VEzyxLALajaUP9N2+/Bm+yciKKHhGstWRYdlXiw3lQhMOxrSyzbzUFcDN21HJQn8BjVEPoTmREKw/9IIcsBFLm785SG1CvTz8L8hldWQOdhspb+g0g0OqcTkrlX/UjD3LYUoSfsNyhK8dGyx4NHlKRL3PpnPk1nRKgXyL0nqpdDdXY06FuiloULpUM/wZwfoTeIVoCtr1Vs2s/1m89ppacXIr/avSEHLQKKCVECjxRkWobjZabOUN+r70TK5i+lQm0tb7aw2E2Wkds4/YkV4/mA4h8zEA8mc96dlronOIxTY0KcYKaNcwjIu3ptCSiKVWqgQpfl71CwJQVQ4e50iCg== Received: from DM6PR07CA0107.namprd07.prod.outlook.com (2603:10b6:5:330::21) by PH7PR12MB6908.namprd12.prod.outlook.com (2603:10b6:510:1ba::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep 2022 14:44:21 +0000 Received: from DM6NAM11FT023.eop-nam11.prod.protection.outlook.com (2603:10b6:5:330:cafe::4e) by DM6PR07CA0107.outlook.office365.com (2603:10b6:5:330::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend Transport; Fri, 23 Sep 2022 14:44:20 +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 DM6NAM11FT023.mail.protection.outlook.com (10.13.173.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 14:44:20 +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.26; Fri, 23 Sep 2022 07:44:10 -0700 Received: from nvidia.com (10.126.231.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.29; Fri, 23 Sep 2022 07:44:09 -0700 From: Suanming Mou To: Matan Azrad , Viacheslav Ovsiienko CC: Subject: [PATCH 12/27] net/mlx5: support caching queue action Date: Fri, 23 Sep 2022 17:43:19 +0300 Message-ID: <20220923144334.27736-13-suanmingm@nvidia.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20220923144334.27736-1-suanmingm@nvidia.com> References: <20220923144334.27736-1-suanmingm@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6NAM11FT023:EE_|PH7PR12MB6908:EE_ X-MS-Office365-Filtering-Correlation-Id: 6da7db85-fa5a-4d29-7605-08da9d721990 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EDrE8o6k9MryiPjjaaX9ouzmvFGSMDkHBtq2x6ZMgB9Yp7CBc5KI7JnJnl5Mfa+HjLX5CagMQn9eAx4YkKwfH8JdfcbNUl2W3Cl/BLItex+xCEQ3jcB74GVIYR4gnVBK/PDkxgDJI3E/dT1i8gALdr3wEW353NED9UrmmcWBbP+N57A1pCNg7G/JAiR8QLJIciQCA6qBe7sFWvkmYbrrGVeeyYDNH08VDJn5PYmU0W3lmmM0lErFX0meNWnN0TGEetSkga7iiT8cnmRqfoLAuwO1OGXs+YZqfkqlS2utXJrBDLtnVAqkww30P92DbCyaODwz7hC9gSKoxMMm81MlI1+SelSgwB0tsrsWq/8oMWCHwR1DeVuH3OD7weHZMcw3EVO9pVZ5vtkEj6ISD7Ru4XRD45eOUVB2m75nZVx7+RR/mt6TsS3Ymg1DEGaB7ZVtYSWf/Ok0vKFz0uluZlTKyZJ+U0NOd0JTX8e9mfBxZ/TpOW9+pH4RvYJ+kIG8w/svGZwAc1Lq62ckrEj74kL8PklDnuhsP8rZF7I06i4YNgelvogCkg6Pr1CujeGAHke4G07Z/S+41+gKhnaoLCO0OrwUTNjoX0vMNDsKAzRVgLgoHjguJLBtKVfWYFeLqpmyqjrhg7RAiOvXgvGywTCgtNZhq96NUDakFxSasfIamPw5NGKqJnTYTv1d9JguOUmFq7z26dvwO2UkRZMa18MH1kEO1d3uurWoYPaf2138lrd59vLiqLvbJX0C4zlL8abVKysBuzIJCY11Y4QHsNaJPAlzbjB2wbNfsx+Cp2R2ZzI= 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)(40470700004)(36840700001)(46966006)(82310400005)(478600001)(2616005)(6636002)(2906002)(5660300002)(356005)(16526019)(70586007)(336012)(70206006)(40460700003)(186003)(1076003)(8676002)(7696005)(316002)(110136005)(6666004)(26005)(426003)(47076005)(36756003)(6286002)(40480700001)(55016003)(83380400001)(4326008)(36860700001)(8936002)(7636003)(82740400003)(41300700001)(86362001)(309714004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 14:44:20.5670 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6da7db85-fa5a-4d29-7605-08da9d721990 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: DM6NAM11FT023.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6908 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 If the port is stopped, the Rx queue data will also be destroyed. At that time, create table with RSS action would be failed due to lack of Rx queue data. This commit adds the cache of queue create operation while port stopped. In case port is stopped, add tables to the ongoing list first, then do action translate only when port starts. Signed-off-by: Suanming Mou --- drivers/net/mlx5/mlx5.h | 2 + drivers/net/mlx5/mlx5_flow.h | 2 + drivers/net/mlx5/mlx5_flow_hw.c | 95 +++++++++++++++++++++++++++++---- drivers/net/mlx5/mlx5_trigger.c | 8 +++ 4 files changed, 97 insertions(+), 10 deletions(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 8d82c68569..be60038810 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -1643,6 +1643,8 @@ struct mlx5_priv { struct mlx5dr_action *hw_drop[2]; /* HW steering global tag action. */ struct mlx5dr_action *hw_tag[2]; + /* HW steering create ongoing rte flow table list header. */ + LIST_HEAD(flow_hw_tbl_ongo, rte_flow_template_table) flow_hw_tbl_ongo; struct mlx5_indexed_pool *acts_ipool; /* Action data indexed pool. */ struct mlx5_hws_cnt_pool *hws_cpool; /* HW steering's counter pool. */ #endif diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index cdea4076d8..746cf439fc 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -2398,4 +2398,6 @@ int mlx5_flow_pattern_validate(struct rte_eth_dev *dev, const struct rte_flow_pattern_template_attr *attr, const struct rte_flow_item items[], struct rte_flow_error *error); +int flow_hw_table_update(struct rte_eth_dev *dev, + struct rte_flow_error *error); #endif /* RTE_PMD_MLX5_FLOW_H_ */ diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 8891f4a4e3..fe40b02c49 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -992,11 +992,11 @@ flow_hw_cnt_compile(struct rte_eth_dev *dev, uint32_t start_pos, * Table on success, NULL otherwise and rte_errno is set. */ static int -flow_hw_actions_translate(struct rte_eth_dev *dev, - const struct mlx5_flow_template_table_cfg *cfg, - struct mlx5_hw_actions *acts, - struct rte_flow_actions_template *at, - struct rte_flow_error *error) +__flow_hw_actions_translate(struct rte_eth_dev *dev, + const struct mlx5_flow_template_table_cfg *cfg, + struct mlx5_hw_actions *acts, + struct rte_flow_actions_template *at, + struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; const struct rte_flow_template_table_attr *table_attr = &cfg->attr; @@ -1309,6 +1309,40 @@ flow_hw_actions_translate(struct rte_eth_dev *dev, "fail to create rte table"); } +/** + * Translate rte_flow actions to DR action. + * + * @param[in] dev + * Pointer to the rte_eth_dev structure. + * @param[in] tbl + * Pointer to the flow template table. + * @param[out] error + * Pointer to error structure. + * + * @return + * 0 on success, negative value otherwise and rte_errno is set. + */ +static int +flow_hw_actions_translate(struct rte_eth_dev *dev, + struct rte_flow_template_table *tbl, + struct rte_flow_error *error) +{ + uint32_t i; + + for (i = 0; i < tbl->nb_action_templates; i++) { + if (__flow_hw_actions_translate(dev, &tbl->cfg, + &tbl->ats[i].acts, + tbl->ats[i].action_template, + error)) + goto err; + } + return 0; +err: + while (i--) + __flow_hw_action_template_destroy(dev, &tbl->ats[i].acts); + return -1; +} + /** * Get shared indirect action. * @@ -1837,6 +1871,10 @@ flow_hw_async_flow_create(struct rte_eth_dev *dev, uint32_t acts_num, flow_idx; int ret; + if (unlikely((!dev->data->dev_started))) { + rte_errno = EINVAL; + goto error; + } if (unlikely(!priv->hw_q[queue].job_idx)) { rte_errno = ENOMEM; goto error; @@ -2231,6 +2269,7 @@ flow_hw_table_create(struct rte_eth_dev *dev, struct mlx5_list_entry *ge; uint32_t i, max_tpl = MLX5_HW_TBL_MAX_ITEM_TEMPLATE; uint32_t nb_flows = rte_align32pow2(attr->nb_flows); + bool port_started = !!dev->data->dev_started; int err; /* HWS layer accepts only 1 item template with root table. */ @@ -2295,21 +2334,26 @@ flow_hw_table_create(struct rte_eth_dev *dev, rte_errno = EINVAL; goto at_error; } + tbl->ats[i].action_template = action_templates[i]; LIST_INIT(&tbl->ats[i].acts.act_list); - err = flow_hw_actions_translate(dev, &tbl->cfg, - &tbl->ats[i].acts, - action_templates[i], error); + if (!port_started) + continue; + err = __flow_hw_actions_translate(dev, &tbl->cfg, + &tbl->ats[i].acts, + action_templates[i], error); if (err) { i++; goto at_error; } - tbl->ats[i].action_template = action_templates[i]; } tbl->nb_action_templates = nb_action_templates; tbl->type = attr->flow_attr.transfer ? MLX5DR_TABLE_TYPE_FDB : (attr->flow_attr.egress ? MLX5DR_TABLE_TYPE_NIC_TX : MLX5DR_TABLE_TYPE_NIC_RX); - LIST_INSERT_HEAD(&priv->flow_hw_tbl, tbl, next); + if (port_started) + LIST_INSERT_HEAD(&priv->flow_hw_tbl, tbl, next); + else + LIST_INSERT_HEAD(&priv->flow_hw_tbl_ongo, tbl, next); return tbl; at_error: while (i--) { @@ -2339,6 +2383,33 @@ flow_hw_table_create(struct rte_eth_dev *dev, return NULL; } +/** + * Update flow template table. + * + * @param[in] dev + * Pointer to the rte_eth_dev structure. + * @param[out] error + * Pointer to error structure. + * + * @return + * 0 on success, negative value otherwise and rte_errno is set. + */ +int +flow_hw_table_update(struct rte_eth_dev *dev, + struct rte_flow_error *error) +{ + struct mlx5_priv *priv = dev->data->dev_private; + struct rte_flow_template_table *tbl; + + while ((tbl = LIST_FIRST(&priv->flow_hw_tbl_ongo)) != NULL) { + if (flow_hw_actions_translate(dev, tbl, error)) + return -1; + LIST_REMOVE(tbl, next); + LIST_INSERT_HEAD(&priv->flow_hw_tbl, tbl, next); + } + return 0; +} + /** * Translates group index specified by the user in @p attr to internal * group index. @@ -4440,6 +4511,10 @@ flow_hw_resource_release(struct rte_eth_dev *dev) if (!priv->dr_ctx) return; flow_hw_flush_all_ctrl_flows(dev); + while (!LIST_EMPTY(&priv->flow_hw_tbl_ongo)) { + tbl = LIST_FIRST(&priv->flow_hw_tbl_ongo); + flow_hw_table_destroy(dev, tbl, NULL); + } while (!LIST_EMPTY(&priv->flow_hw_tbl)) { tbl = LIST_FIRST(&priv->flow_hw_tbl); flow_hw_table_destroy(dev, tbl, NULL); diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index 9e458356a0..ab2b83a870 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1170,6 +1170,14 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->port_id, rte_strerror(rte_errno)); goto error; } + if (priv->sh->config.dv_flow_en == 2) { + ret = flow_hw_table_update(dev, NULL); + if (ret) { + DRV_LOG(ERR, "port %u failed to update HWS tables", + dev->data->port_id); + goto error; + } + } ret = mlx5_traffic_enable(dev); if (ret) { DRV_LOG(ERR, "port %u failed to set defaults flows", -- 2.25.1