From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40085.outbound.protection.outlook.com [40.107.4.85]) by dpdk.org (Postfix) with ESMTP id 89A875424 for ; Sun, 28 Oct 2018 18:34:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QUDmURSvF6Sq6xV3WPi1DnpDkdxMpFCjjENl+2K30hM=; b=nazfEFoXJlc/i3QNLCM4OmEH1sbMA1Raozw9878MUwgg4itig/jMJq3bEJHqGphu8kmTLIT1p460ZI4LBNiG25ZMvXoR2Tb3JQ3M7kGDSWYnyDxp/9JT0Xl1TNnSJVp9g18KX8uUonAZ2GzCWUSFd9tmKS8+t6RulhoBAwyR0hM= Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com (52.134.72.27) by DB3PR0502MB4057.eurprd05.prod.outlook.com (52.134.67.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1273.21; Sun, 28 Oct 2018 17:34:50 +0000 Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::f8a1:fcab:94f0:97cc]) by DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::f8a1:fcab:94f0:97cc%4]) with mapi id 15.20.1273.027; Sun, 28 Oct 2018 17:34:50 +0000 From: Yongseok Koh To: Shahaf Shuler CC: "dev@dpdk.org" , Yongseok Koh , Ori Kam Thread-Topic: [PATCH] net/mlx5: fix Direct Verbs getting item and action flags Thread-Index: AQHUbuSH+I7dIxYbCkyDfM3wP2/ckw== Date: Sun, 28 Oct 2018 17:34:50 +0000 Message-ID: <20181028173440.27808-1-yskoh@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR08CA0017.namprd08.prod.outlook.com (2603:10b6:a03:100::30) To DB3PR0502MB3980.eurprd05.prod.outlook.com (2603:10a6:8:10::27) authentication-results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4057; 6:eI7K20N71DGWjlC2s/qogG8IdxTcbYhMp7PFj9lasxPBCWaKudX/qqPNfQUZ53PvfPQlyNV5eQ07K5EeYdNa7gqCBmi77Te2KwvA/4/J/t+Px99nQn+8Eo0OH1jSJKZk5BO6xZBBnoMyXaSc8hHvEiIXaEyS/U47A3sQMDXGhiExpEJpQVuShrTGiPW+5lz4qyOHifGPtttqwSAVPpjtpCaDh3Eb0LebHtG15hFvR4FSxGVDOlhVbiQAJebYmmaizdftfYeH7LIh+4yrAuKwmXy2pxgiBW4fdmU8y4iQw/Gm6Kxz3FTMZXo2pwq+2LQdc0cFwQsYHc2OLgcPphXkRS0j2R6J8uMjHifyliUcum3A8QSUshxqv2bSP6c3XFFhPg2S8YG3rsFFpp1nU1mwiR2BLZUr4DK+/X5vbQabIkQJSvIQFmm+llN1gnlgmCxzDVw0Te9TX28XhVX5Fw49dA==; 5:q6X/2nEGn2IA+Rs2wmU2aG1iHvkDheuWW61J7/f10q3U9cjubyZhckkt7TmL0t4Y61Ty4y/5JQ++UBmg+hvAShxkkuH1AsLLBI6aLFxTvDU0MmBXbI2CZ4SdbEiNSgTxMFuOFk8MpQG8V5Ew6g0h3cWMsBn1HwQjZG2nN9nYbQU=; 7:ZAjYflTX/Pdqr0lUJkI8tYywdNhIKsxs1YbOWW2jZ3cPfN3DecASs1rdXKK+iZw5fo5QRmeiuRuCvNOrMiCKaUM872hTf0jQTGO4rM1FDLL9cFAGnp11xJFpzBcSsoD5OdcsBVa0gvrhiV+ROGqNwQ== x-ms-office365-filtering-correlation-id: 199f024a-7fe0-4ffb-2ff8-08d63cfba9b7 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4057; x-ms-traffictypediagnostic: DB3PR0502MB4057: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231382)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:DB3PR0502MB4057; BCL:0; PCL:0; RULEID:; SRVR:DB3PR0502MB4057; x-forefront-prvs: 0839D067E7 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(39850400004)(376002)(396003)(346002)(51234002)(199004)(189003)(2906002)(1076002)(97736004)(6486002)(6512007)(2900100001)(5250100002)(6436002)(6636002)(86362001)(256004)(36756003)(575784001)(14444005)(5660300001)(68736007)(14454004)(486006)(8676002)(478600001)(2616005)(71190400001)(476003)(71200400001)(66066001)(305945005)(81156014)(8936002)(7736002)(81166006)(6506007)(102836004)(316002)(26005)(1857600001)(37006003)(186003)(386003)(4326008)(6862004)(107886003)(53936002)(25786009)(54906003)(106356001)(105586002)(99286004)(3846002)(6116002)(52116002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4057; H:DB3PR0502MB3980.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: W1w+WT05blgeNoHYC/1t/q1CS2ehmSPQF6TbFj7u+SYT1OgPvjy3+5Ajkh40aclwzh5VQRc18KQlvTp4OtZrK6ySO7PM2SRUc4wCnU7nUnExazbBXNoTw7SthDnrGqMnpUU5HuwqhgraRRJ6I29VMVLXCAbHeDFTbQi9kfv7BZKG9kWU1PTx0rXx/uEeD0VnxmZXFaOJj5NY21aYoIvgHukHzDp2mn50N5dRGofZ+cxm4WgiSGjmNOsh7SCdVXpgExdttWhrSWWa8xH4XR+5JU8SiueCkWTo3wzGZAM0w4CCI2paZJGY2rB4AJNoPUZUG9vmUrJhed4/0FJ0zgDaq02wCp+vyLCOKPYRWCfPhXU= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 199f024a-7fe0-4ffb-2ff8-08d63cfba9b7 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Oct 2018 17:34:50.5139 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4057 Subject: [dpdk-dev] [PATCH] net/mlx5: fix Direct Verbs getting item and action flags X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Oct 2018 17:34:52 -0000 Flow driver has to provide detected item flags and action flags via flow_drv_prepare(). DV doesn't return flags at all. Fixes: 865a0c15672c ("net/mlx5: add Direct Verbs prepare function") Cc: orika@mellanox.com Signed-off-by: Yongseok Koh --- drivers/net/mlx5/mlx5_flow_dv.c | 115 ++++++++++++++++++++++++++++++++++++= ---- 1 file changed, 106 insertions(+), 9 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_d= v.c index 8f729f44f8..67c133c2fb 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -354,6 +354,103 @@ flow_dv_validate(struct rte_eth_dev *dev, const struc= t rte_flow_attr *attr, } =20 /** + * Extract item flags and action flags. + * + * @param[in] items + * Pointer to the list of items. + * @param[in] actions + * Pointer to the list of actions. + * @param[out] item_flags + * Pointer to bit mask of all items detected. + * @param[out] action_flags + * Pointer to bit mask of all actions detected. + */ +static void +flow_dv_get_item_action_flags(const struct rte_flow_item items[], + const struct rte_flow_action actions[], + uint64_t *item_flags, uint64_t *action_flags) +{ + uint64_t detected_items =3D 0; + uint64_t detected_actions =3D 0; + int tunnel; + + for (; items->type !=3D RTE_FLOW_ITEM_TYPE_END; items++) { + tunnel =3D !!(detected_items & MLX5_FLOW_LAYER_TUNNEL); + switch (items->type) { + case RTE_FLOW_ITEM_TYPE_ETH: + detected_items |=3D tunnel ? MLX5_FLOW_LAYER_INNER_L2 : + MLX5_FLOW_LAYER_OUTER_L2; + break; + case RTE_FLOW_ITEM_TYPE_VLAN: + detected_items |=3D tunnel ? MLX5_FLOW_LAYER_INNER_VLAN : + MLX5_FLOW_LAYER_OUTER_VLAN; + break; + case RTE_FLOW_ITEM_TYPE_IPV4: + detected_items |=3D tunnel ? + MLX5_FLOW_LAYER_INNER_L3_IPV4 : + MLX5_FLOW_LAYER_OUTER_L3_IPV4; + break; + case RTE_FLOW_ITEM_TYPE_IPV6: + detected_items |=3D tunnel ? + MLX5_FLOW_LAYER_INNER_L3_IPV6 : + MLX5_FLOW_LAYER_OUTER_L3_IPV6; + break; + case RTE_FLOW_ITEM_TYPE_TCP: + detected_items |=3D tunnel ? + MLX5_FLOW_LAYER_INNER_L4_TCP : + MLX5_FLOW_LAYER_OUTER_L4_TCP; + break; + case RTE_FLOW_ITEM_TYPE_UDP: + detected_items |=3D tunnel ? + MLX5_FLOW_LAYER_INNER_L4_UDP : + MLX5_FLOW_LAYER_OUTER_L4_UDP; + break; + case RTE_FLOW_ITEM_TYPE_GRE: + case RTE_FLOW_ITEM_TYPE_NVGRE: + detected_items |=3D MLX5_FLOW_LAYER_GRE; + break; + case RTE_FLOW_ITEM_TYPE_VXLAN: + detected_items |=3D MLX5_FLOW_LAYER_VXLAN; + break; + case RTE_FLOW_ITEM_TYPE_VXLAN_GPE: + detected_items |=3D MLX5_FLOW_LAYER_VXLAN_GPE; + break; + case RTE_FLOW_ITEM_TYPE_META: + detected_items |=3D MLX5_FLOW_ITEM_METADATA; + break; + default: + break; + } + } + for (; actions->type !=3D RTE_FLOW_ACTION_TYPE_END; actions++) { + switch (actions->type) { + case RTE_FLOW_ACTION_TYPE_FLAG: + detected_actions |=3D MLX5_FLOW_ACTION_FLAG; + break; + case RTE_FLOW_ACTION_TYPE_MARK: + detected_actions |=3D MLX5_FLOW_ACTION_MARK; + break; + case RTE_FLOW_ACTION_TYPE_DROP: + detected_actions |=3D MLX5_FLOW_ACTION_DROP; + break; + case RTE_FLOW_ACTION_TYPE_QUEUE: + detected_actions |=3D MLX5_FLOW_ACTION_QUEUE; + break; + case RTE_FLOW_ACTION_TYPE_RSS: + detected_actions |=3D MLX5_FLOW_ACTION_RSS; + break; + case RTE_FLOW_ACTION_TYPE_COUNT: + detected_actions |=3D MLX5_FLOW_ACTION_COUNT; + break; + default: + break; + } + } + *item_flags =3D detected_items; + *action_flags =3D detected_actions; +} + +/** * Internal preparation function. Allocates the DV flow size, * this size is constant. * @@ -376,15 +473,15 @@ flow_dv_validate(struct rte_eth_dev *dev, const struc= t rte_flow_attr *attr, */ static struct mlx5_flow * flow_dv_prepare(const struct rte_flow_attr *attr __rte_unused, - const struct rte_flow_item items[] __rte_unused, - const struct rte_flow_action actions[] __rte_unused, - uint64_t *item_flags __rte_unused, - uint64_t *action_flags __rte_unused, + const struct rte_flow_item items[], + const struct rte_flow_action actions[], + uint64_t *item_flags, uint64_t *action_flags, struct rte_flow_error *error) { uint32_t size =3D sizeof(struct mlx5_flow); struct mlx5_flow *flow; =20 + flow_dv_get_item_action_flags(items, actions, item_flags, action_flags); flow =3D rte_calloc(__func__, 1, size, 0); if (!flow) { rte_flow_error_set(error, ENOMEM, @@ -1067,7 +1164,7 @@ flow_dv_create_action(const struct rte_flow_action *a= ction, dev_flow->dv.actions[actions_n].tag_value =3D mlx5_flow_mark_set(MLX5_FLOW_MARK_DEFAULT); actions_n++; - flow->actions |=3D MLX5_FLOW_ACTION_FLAG; + assert(flow->actions & MLX5_FLOW_ACTION_FLAG); break; case RTE_FLOW_ACTION_TYPE_MARK: dev_flow->dv.actions[actions_n].type =3D MLX5DV_FLOW_ACTION_TAG; @@ -1075,18 +1172,18 @@ flow_dv_create_action(const struct rte_flow_action = *action, mlx5_flow_mark_set (((const struct rte_flow_action_mark *) (action->conf))->id); - flow->actions |=3D MLX5_FLOW_ACTION_MARK; + assert(flow->actions & MLX5_FLOW_ACTION_MARK); actions_n++; break; case RTE_FLOW_ACTION_TYPE_DROP: dev_flow->dv.actions[actions_n].type =3D MLX5DV_FLOW_ACTION_DROP; - flow->actions |=3D MLX5_FLOW_ACTION_DROP; + assert(flow->actions & MLX5_FLOW_ACTION_DROP); break; case RTE_FLOW_ACTION_TYPE_QUEUE: queue =3D action->conf; flow->rss.queue_num =3D 1; (*flow->queue)[0] =3D queue->index; - flow->actions |=3D MLX5_FLOW_ACTION_QUEUE; + assert(flow->actions & MLX5_FLOW_ACTION_QUEUE); break; case RTE_FLOW_ACTION_TYPE_RSS: rss =3D action->conf; @@ -1098,7 +1195,7 @@ flow_dv_create_action(const struct rte_flow_action *a= ction, flow->rss.types =3D rss->types; flow->rss.level =3D rss->level; /* Added to array only in apply since we need the QP */ - flow->actions |=3D MLX5_FLOW_ACTION_RSS; + assert(flow->actions & MLX5_FLOW_ACTION_RSS); break; default: break; --=20 2.11.0