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 07B03A054A; Fri, 23 Sep 2022 16:47:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DE6D742C3E; Fri, 23 Sep 2022 16:44:49 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2056.outbound.protection.outlook.com [40.107.93.56]) by mails.dpdk.org (Postfix) with ESMTP id C890B40156 for ; Fri, 23 Sep 2022 16:44:47 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YjU7G1Ga6KlvWrrF8xpyoGmvsWJO87/eig/VVBZA0ZnGX4YvUUDw1Pkb0t7M1vVJFC33n+j8ymlUVxWnP2OZMwOEwJfQBvNzXQkNRB2Vz/vvcd27MIw9+J+HZodPFiMNNbex81o2OhSv+zaI/6J6BL7SRtJGHGtOdRdr5c5rrSJWe2ioh+XkmGE3c5DkOZfHWy06Uvk1sF6eh1g7cxhyV0xfPIFGMunzD+EGuELtbCePdkbVM0RF8W2hQzE1N3Ea3W4AA1B39S11pby3pf78GUkfuzK70wQmCz/quFikMLUbTgIU+MWbibnkFQ1xwUg2V/u6ywf6/IbHBsk305zh9g== 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=zZwhTtwxIM5LaThPVm9eMwpBkZ66lvlDU1gdGh+eCPQ=; b=VxMSeC+dt8fGLZQQBbOZaPqCLllB4PCPHPQeunbXahzMhn8y5Zeka4d9zptkglxFqHIbrvzQYGNT7eO2GREJADV9PQ/etqF9GKG7mQ+d4gTmEIGJvfJXeTYR0ydXaWtsnBGglWlDln+tLdycX/URRB+113bAsWgwIzptIMsan9N9OR7TtgMYQoDS7RJdG9AnXmna+Lm2XF/AE3zxWzwfEdcEqqS1+Juk6OvNXW3pxl/RobMl0wHxNUhAiURUA9ndY83958Px3sqqESCHmfVv58dlsyZfUFxYhMHNNM9CGw26g03kvDlgJVf0Ma86s9CuPrJlD71FWzluVxnNExUk5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) 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=zZwhTtwxIM5LaThPVm9eMwpBkZ66lvlDU1gdGh+eCPQ=; b=qgYI3F6Op6VcD5DQnRtH2lhx7DQBbGoJj+MHBtVfCNWNdwqlTOA9bkHgvivj4U068q06FEMSdyXqtrKiIwLvNaz5rJJWma11heTgOqIonT+H1B9UBZpowfNz0YtLcIi78yKjxTlLWzyfeOKwpk97YRD3POp77M7wpxT9KeaPEoUTrELzlGovsBZBJuWZUoqnAqeVlTUZSDgeKbhZ8NUfUWd8/YZvzq6zu5ALGP+c44WpUXTUzBUMwynELFXpEDbAYr+lvyh+nRmdn1xQSpIZanvRlihY6WjhgQ0NN5HdOWnwNr+90Wt+3AznawxvDpCzr1Xbx32yhuCxRpiaOAPS/g== Received: from MW4PR03CA0076.namprd03.prod.outlook.com (2603:10b6:303:b6::21) by SA1PR12MB7365.namprd12.prod.outlook.com (2603:10b6:806:2ba::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.18; Fri, 23 Sep 2022 14:44:45 +0000 Received: from CO1NAM11FT034.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b6:cafe::37) by MW4PR03CA0076.outlook.office365.com (2603:10b6:303:b6::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:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CO1NAM11FT034.mail.protection.outlook.com (10.13.174.248) 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:45 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) 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:30 -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:28 -0700 From: Suanming Mou To: Matan Azrad , Viacheslav Ovsiienko CC: , Alexander Kozyrev Subject: [PATCH 23/27] net/mlx5: add meter color flow matching in dv Date: Fri, 23 Sep 2022 17:43:30 +0300 Message-ID: <20220923144334.27736-24-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: CO1NAM11FT034:EE_|SA1PR12MB7365:EE_ X-MS-Office365-Filtering-Correlation-Id: 083163a0-0102-4b2a-b225-08da9d722882 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 14Ih3bcP3pLG8x6rg39xU4P5NHfVhM/RgJYRit7erbAHrThyS8vxbJ37yjDz7x6MVkVR7eMGrefMzErmHZ4tAAkunu5hGFqfZOg5sx/Q4tVYKdgvt9eE6xJ+QTLC+j0Bu5YztARMAoA0rwTmgmEDSUUS6txPRSxNRP24pP9SFMBE4oBciOOkajpmVhzq/SeYfJAuNL8Tw7uDXIXdrBS9So1rvKjxh3DEaY3fZpDtegFH7fD7XgAwo1DsFuJd7ksvjOj0yJRrkwQiKrHJ9FXAquVOmbDhOt9kblWxK4dzV6ulJDCkQ8cYPn+ROpcr0tDCj3Qb8ZFPRfDMYVyW347PW3PTpnxiD1BExF3d5+qzYHe7cwL/AaF01/dAnbIp7ITZvrlY2BvIhYzFXU1yvDwG50OdSYXTCwp7TwjizBZ4i4egsvTwF32WKtp7vZX5KISffZaf8BUntIKh4dyTfS30l3KpTKOwFuYzl2tibasH2PxxuGwaEedHV1tzxJHNxH2rC4/edlMk7YnEmu2ySUlReVpYpI/hQM4pqdAM917egQVeh7/WB0xizhreWYylpn8JPq2UuWD0c8pJdXo6dUq577xVKlOxXb0EOEAxP8Qk3/hU31yuqmOw3zE13/TLQ0JcVwluqJmX2GDkYUUKbHmM1xnGROtSEHjhN4GDzOIQvTkBiHZSFKXriaqh0nGTkODP4GR7fHHWf7y+PHWPdx8GwRA+QaUvBZbQVdwVPdXJvAB4Wtb4tuS2oHBWMzSa4MKmf+JPDwfsCs+nlGMdN59FHw== X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230022)(4636009)(39860400002)(136003)(376002)(396003)(346002)(451199015)(40470700004)(36840700001)(46966006)(26005)(6286002)(7696005)(8676002)(36756003)(110136005)(82310400005)(70586007)(54906003)(40460700003)(4326008)(316002)(41300700001)(107886003)(6666004)(70206006)(55016003)(5660300002)(8936002)(6636002)(40480700001)(86362001)(356005)(82740400003)(186003)(7636003)(83380400001)(336012)(16526019)(36860700001)(1076003)(2616005)(478600001)(2906002)(47076005)(426003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2022 14:44:45.6270 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 083163a0-0102-4b2a-b225-08da9d722882 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.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT034.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB7365 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 From: Alexander Kozyrev Create firmware and software steering meter color support. Allow matching on a meter color in both root and non-root groups. Signed-off-by: Alexander Kozyrev --- drivers/net/mlx5/mlx5_flow.h | 3 + drivers/net/mlx5/mlx5_flow_dv.c | 113 ++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 2d1a9dba27..99d3c40f36 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -208,6 +208,9 @@ enum mlx5_feature_name { #define MLX5_FLOW_ITEM_PORT_REPRESENTOR (UINT64_C(1) << 41) #define MLX5_FLOW_ITEM_REPRESENTED_PORT (UINT64_C(1) << 42) +/* Meter color item */ +#define MLX5_FLOW_ITEM_METER_COLOR (UINT64_C(1) << 44) + /* Outer Masks. */ #define MLX5_FLOW_LAYER_OUTER_L3 \ (MLX5_FLOW_LAYER_OUTER_L3_IPV4 | MLX5_FLOW_LAYER_OUTER_L3_IPV6) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 36059beb71..e1db68b532 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -3676,6 +3676,69 @@ flow_dv_validate_action_aso_ct(struct rte_eth_dev *dev, return 0; } +/** + * Validate METER_COLOR item. + * + * @param[in] dev + * Pointer to the rte_eth_dev structure. + * @param[in] item + * Item specification. + * @param[in] attr + * Attributes of flow that includes this item. + * @param[out] error + * Pointer to error structure. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +static int +flow_dv_validate_item_meter_color(struct rte_eth_dev *dev, + const struct rte_flow_item *item, + const struct rte_flow_attr *attr __rte_unused, + struct rte_flow_error *error) +{ + struct mlx5_priv *priv = dev->data->dev_private; + const struct rte_flow_item_meter_color *spec = item->spec; + const struct rte_flow_item_meter_color *mask = item->mask; + struct rte_flow_item_meter_color nic_mask = { + .color = RTE_COLORS + }; + int ret; + + if (priv->mtr_color_reg == REG_NON) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "meter color register" + " isn't available"); + ret = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, error); + if (ret < 0) + return ret; + if (!spec) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, + item->spec, + "data cannot be empty"); + if (spec->color > RTE_COLORS) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION_CONF, + &spec->color, + "meter color is invalid"); + if (!mask) + mask = &rte_flow_item_meter_color_mask; + if (!mask->color) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_SPEC, NULL, + "mask cannot be zero"); + + ret = mlx5_flow_item_acceptable(item, (const uint8_t *)mask, + (const uint8_t *)&nic_mask, + sizeof(struct rte_flow_item_meter_color), + MLX5_ITEM_RANGE_NOT_ACCEPTED, error); + if (ret < 0) + return ret; + return 0; +} + int flow_dv_encap_decap_match_cb(void *tool_ctx __rte_unused, struct mlx5_list_entry *entry, void *cb_ctx) @@ -7410,6 +7473,13 @@ flow_dv_validate(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, if (ret < 0) return ret; break; + case RTE_FLOW_ITEM_TYPE_METER_COLOR: + ret = flow_dv_validate_item_meter_color(dev, items, + attr, error); + if (ret < 0) + return ret; + last_item = MLX5_FLOW_ITEM_METER_COLOR; + break; default: return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, @@ -10485,6 +10555,45 @@ flow_dv_translate_item_flex(struct rte_eth_dev *dev, void *matcher, void *key, mlx5_flex_flow_translate_item(dev, matcher, key, item, is_inner); } +/** + * Add METER_COLOR item to matcher + * + * @param[in] dev + * The device to configure through. + * @param[in, out] key + * Flow matcher value. + * @param[in] item + * Flow pattern to translate. + * @param[in] key_type + * Set flow matcher mask or value. + */ +static void +flow_dv_translate_item_meter_color(struct rte_eth_dev *dev, void *key, + const struct rte_flow_item *item, + uint32_t key_type) +{ + const struct rte_flow_item_meter_color *color_m = item->mask; + const struct rte_flow_item_meter_color *color_v = item->spec; + uint32_t value, mask; + int reg = REG_NON; + + MLX5_ASSERT(color_v); + if (MLX5_ITEM_VALID(item, key_type)) + return; + MLX5_ITEM_UPDATE(item, key_type, color_v, color_m, + &rte_flow_item_meter_color_mask); + value = rte_col_2_mlx5_col(color_v->color); + mask = color_m ? + color_m->color : (UINT32_C(1) << MLX5_MTR_COLOR_BITS) - 1; + if (!!(key_type & MLX5_SET_MATCHER_SW)) + reg = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, NULL); + else + reg = flow_hw_get_reg_id(RTE_FLOW_ITEM_TYPE_METER_COLOR, 0); + if (reg == REG_NON) + return; + flow_dv_match_meta_reg(key, (enum modify_reg)reg, value, mask); +} + static uint32_t matcher_zero[MLX5_ST_SZ_DW(fte_match_param)] = { 0 }; #define HEADER_IS_ZERO(match_criteria, headers) \ @@ -13234,6 +13343,10 @@ flow_dv_translate_items(struct rte_eth_dev *dev, /* No other protocol should follow eCPRI layer. */ last_item = MLX5_FLOW_LAYER_ECPRI; break; + case RTE_FLOW_ITEM_TYPE_METER_COLOR: + flow_dv_translate_item_meter_color(dev, key, items, key_type); + last_item = MLX5_FLOW_ITEM_METER_COLOR; + break; default: break; } -- 2.25.1